如何将一个Set(“a”,“b”,“c”)转换为Map(“a” - > 1,“b” - > 2,“c” - > 3)? 我认为它应该与toMap一起工作。斯卡拉转换器设置为地图
19
A
回答
30
zipWithIndex
可能是你在找什么。它将收集您的信件并创建一个新的Tuples集合,将价值与集合中的位置相匹配。你虽然有一个额外的要求 - 它看起来像你的仓位从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这样的结构,如果你想让上述位置一致地工作。
+0
这就是我想要的。谢谢。 – 2011-01-31 14:26:03
7
toMap只有在Set实体是键/值对(例如Set((“a”,1),(“b”,2),(“c”,3))))时才有效。 为了得到你想要的东西,用zipWithIndex:
scala> Set("a","b","c") zipWithIndex
res5: scala.collection.immutable.Set[(java.lang.String, Int)] = Set((a,0), (b,1), (c,2))
编辑: 或(在你原来的问题:))
scala> Set("a","b","c") zip (1 to 3) toMap
EDIT2:咄,我忘了toMap底!
19
下面是与您的Set
被拉链使用从1开始的所有自然数的Stream
另一种解决方案:
scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))
+0
+1,这里是最好的答案。 – missingfaktor 2012-02-04 09:01:44
2
这也将工作:
(('a' to 'c') zip (1 to 3)).toMap
相关问题
- 1. 斯卡拉地图转换
- 2. 斯卡拉:包装上的Java地图后,斯卡拉转换
- 3. 斯卡拉:转换地图案例类
- 4. 斯卡拉地图案例类转换
- 5. 斯卡拉地图转型
- 6. 斯卡拉 - 列表地图转换为地图
- 7. 斯卡拉 - 转换设置[(X,Y])设置[Y]
- 8. 将斯卡拉地图转换为列表
- 9. 如何转换为java.util.Map到斯卡拉地图
- 10. 斯卡拉变换地图的列表为地图列表
- 11. 斯卡拉 - 变换迭代到地图
- 12. 斯卡拉Bitset toBitMask转换
- 13. 斯卡拉Java转换
- 14. 转换Java来斯卡拉
- 15. Java来斯卡拉转换
- 16. 转换类型斯卡拉
- 17. 转换斯卡拉ArrayBuffer到迭代器
- 18. 转换为net.liftweb.json.JsonAST.JObject提升斯卡拉
- 19. 斯卡拉:case类转换为对象
- 20. 斯卡拉炭为int转换
- 21. 斯卡拉设置功能
- 22. 斯卡拉和SBT设置
- 23. 斯卡拉地图解析器
- 24. 斯卡拉:NodeSeq到地图
- 25. 斯卡拉:在地图
- 26. 斯卡拉,@ResponseBody和地图
- 27. 斯卡拉地图更新
- 28. 斯卡拉地图+ =操作
- 29. 斯卡拉地图伴侣
- 30. 斯卡拉地图验证
你希望B映射到2,因为这是集合中的第二个?或者因为它是字母表中的第二个字母?正如其他海报所指出的那样,套件并没有订购,所以第一套将无法使用。 – 2011-01-31 14:54:46