gpt4 book ai didi

list - 斯卡拉 : transform a list into a map

转载 作者:行者123 更新时间:2023-12-01 04:30:18 27 4
gpt4 key购买 nike

我有一个动物类定义为

case class Animal(name: String, properties: List[String])

给定一个动物列表,我想要一张来自属性的 map -> 满足该属性的动物列表

举个例子,如果我有输入,说,
List(
Animal("Dog",
List("has tail",
"can swim",
"can bark",
"can bite")),
Animal("Tuna",
List("can swim",
"has scales",
"is edible")),
Animal("Black Mamba",
List("has scales",
"is venomous",
"can bite"))
)

输出应该是
Map(
"has tail" -> List(Dog)
"can swim" -> List(Tuna,Dog)
"can bark" -> List(Dog)
"has scales" -> List(Tuna,Snake)
"is edible" -> List(Tuna)
"is venomous" -> List(Snake)
"can bite" -> List(Dog,Snake)
)

我对函数式编程很陌生。我可以以命令式的方式做到这一点,但一直在努力想出一个功能性的解决方案。任何指针都是最受欢迎的! :)

最佳答案

一种这样的方式如下

animals.
flatMap(a => a.properties.map(p => (p, a.name)))
.groupBy(_._1)
.mapValues(_.map(_._2))
flatMap给你一个属性元组列表 -> 动物名称
groupBy然后按属性名称分组,产生 Map[String, List[(String,String)] Map的 key 在哪里是属性,值是属性名称 -> 动物名称的元组
mapValues然后获取结果 List((String,String)) map 值并将其转换为元组的第二部分,即动物的名称

关于list - 斯卡拉 : transform a list into a map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com