Tor*_*idt 19 scala scala-collections
如何将Set("a","b","c")转换为Map("a" - > 1,"b" - > 2,"c" - > 3)?我认为它应该与toMap一起使用.
Ada*_*ung 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
Run Code Online (Sandbox Code Playgroud)
一个额外的考虑因素 - 集合不保留位置.如果您希望上述位置始终如一,请考虑使用List之类的结构.
Fra*_*mas 19
这是另一种解决方案,它使用Stream从1开始的所有自然数字来压缩你的Set:
scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
或(如你原来的问题):
Set("a","b","c") zip (1 to 3) toMap
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17332 次 |
| 最近记录: |