Scala 通过比较字符串列表和映射筛选出元素
我有两个函数,它们获取字符串列表和映射作为参数,并返回整数列表。如图所示:Scala 通过比较字符串列表和映射筛选出元素,scala,Scala,我有两个函数,它们获取字符串列表和映射作为参数,并返回整数列表。如图所示: def f1(names: List[String], namemap: Map[String, List[Int]]): List[Int] = def f2(names: List[String], namemap: Map[String, List[Int]]): List[Int] = 为了使以下解释更容易理解,以下是一个示例: val nameslist = List("alex",
def f1(names: List[String], namemap: Map[String, List[Int]]): List[Int] =
def f2(names: List[String], namemap: Map[String, List[Int]]): List[Int] =
为了使以下解释更容易理解,以下是一个示例:
val nameslist = List("alex", "toby")
val namesmap = Map("sarah" -> List(5), "toby" -> List(6), "alex" -> List(1, 6))
println(f1(nameslist, namesmap))
//should print: List(6,1)
println(f2(nameslist, namesmap))
//should print: List(6)
函数f1
应该“比较”吗?列表namelist
中的字符串与映射namemap
中的字符串一起,并返回找到该字符串的namemap
中的所有整数值
函数f2
应该只返回两个字符串中的整数。这应该会有所帮助
val nameslist = List("alex", "toby", "jo")
val namesmap =
Map("sarah" -> List(5), "toby" -> List(6), "alex" -> List(1, 6))
nameslist.flatMap(namesmap.get) //List[List[Int]]
.flatten //List[Int]
.distinct //duplicates removed
//res0: List[Int] = List(1, 6)
nameslist.flatMap(namesmap.get) //List[List[Int]]
.reduceOption(_ intersect _) //Option[List[Int]]
.getOrElse(Nil) //List[Int]
//res1: List[Int] = List(6)
你试图用什么方法来解决这个问题?你能给我们你的部分解决方案吗?谢谢:)这是我第一次处理这样的问题,我很迷茫从哪里开始!关于我应该研究什么,有什么建议吗?使用名字列表中的
map
和foldLeft
和名字地图中的getOrElse
可以很容易地解决这个问题;检查一下。此外,还需要检查Set类;)这很好!谢谢你,伙计!唯一的问题是,当我尝试f2(List(“alex”,“jo”),namemap)
时,它仍然返回List(1,6)
,即使“jo”
在namemap
中不存在!谢谢<代码>如果(nameslist.map(namesmap.get).forall(u.isDefined))<代码>其他列表()