如何将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的内容,谢谢你链接到这个问题。