如何将集合 Set("a","b","c") 转换为映射 Map("a"->1,"b"->2,"c"->3)?我认为可以使用 toMap 方法实现。
如何将集合 Set("a","b","c") 转换为映射 Map("a"->1,"b"->2,"c"->3)?我认为可以使用 toMap 方法实现。
zipWithIndex
很可能是你要找的函数。它可以将你的字母集合转换为一个新的元组集合,每个元组中的值与它在集合中的位置相匹配。不过,你有一个额外的要求——看起来你的位置从1开始,而不是0,因此你需要转换这些元组:
Set("a","b","c")
.zipWithIndex //(a,0), (b,1), (c,2)
.map{case(v,i) => (v, i+1)} //increment each of those indexes
.toMap //toMap does work for a collection of Tuples
还有一个需要考虑的问题 - 集合不会保留位置信息。如果你想要位置信息始终有效,建议使用类似List这样的数据结构。
这里有另一个解决方案,它使用从1开始的所有自然数的Stream
与你的Set
进行压缩:
scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))
toMap
只能在 Set
条目是键值对(例如 Set(("a",1),("b",2),("c",3))
)时使用。
要得到您想要的结果,请使用 zipWithIndex
:
Set("a","b","c") zipWithIndex
// Set[(String, Int)] = Set((a,0), (b,1), (c,2))
Set("a","b","c") zip (1 to 3) toMap
(('a' to 'c') zip (1 to 3)).toMap