如何将IndexedSeq映射到Scala中不同类型的映射集合?
拥有 我怎样才能得到最好的答案如何将IndexedSeq映射到Scala中不同类型的映射集合?,scala,mapping,Scala,Mapping,拥有 我怎样才能得到最好的答案 val a: IndexedSeq[String] = Array("one", "two", "three") def f(s: String): Int = s match { case "one" => 1; case "two" => 2; case "three" => 3; case _ => throw new IllegalArgumentException } 假设我不介意引入一个代理函数,以元组的形式
val a: IndexedSeq[String] = Array("one", "two", "three")
def f(s: String): Int = s match {
case "one" => 1; case "two" => 2; case "three" => 3;
case _ => throw new IllegalArgumentException
}
假设我不介意引入一个代理函数,以元组的形式返回键值对,那么这将是一个更好的解决方案
PS:实际上,我对如何将一个集合映射到另一个所需类型的集合很感兴趣,但我选择了这个示例作为一个特殊案例来说明问题,并使问题更加具体。这意味着特定案例(IndexedSeq to Map)解决方案是可以接受的,但更通用的注释是受欢迎的。现在,我使用foreach
填充这种情况下的可变映射缓冲区,但这似乎与真正的Scala函数方式IMHO相去甚远。我发现自己使用了太多的foreach和可变缓冲区,这让我很紧张,这就是为什么我问了所有这些关于映射的问题。还有什么问题:
val m: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
制作:
a map {i => (i, f(i))} toMap
这有什么问题吗
val m: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
制作:
a map {i => (i, f(i))} toMap
这一点效率更高,但要完全理解就更复杂了。这避免了由
map
创建的中间IndexedSeq[(String,Int)]
。只是玩得开心;-)
请参阅本文:这更有效,但更复杂,无法完全理解。这避免了由
map
创建的中间IndexedSeq[(String,Int)]
。只是玩得开心;-)
请参阅本文:这很奇怪:如果我没有明确指定
val结果
类型,它将获得IndexedSeq[(String,Int)]
,但如果我这样做,它将按需要工作。我将研究bereakOut,谢谢你链接到这个问题。这很奇怪:如果我没有明确指定val结果
类型,它会得到IndexedSeq[(String,Int)]
,但如果我这样做了,它会按照需要工作。我将要学习关于bereakOut的内容,谢谢你链接到这个问题。