如何將一個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