如何将Set(“a”,“b”,“c”)转换为Map(“a” - > 1,“b” - > 2,“c” - > 3) ? 我认为它应该适用于toMap。
答案 0 :(得分:30)
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 :(得分:19)
以下是另一种解决方案,该解决方案使用从{1开始压缩的所有自然数的Stream
与Set
压缩:
scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))
答案 2 :(得分:7)
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
答案 3 :(得分:2)
这也有效:
(('a' to 'c') zip (1 to 3)).toMap