Làm cách nào để chuyển đổi một Tập ("a", "b", "c") thành Bản đồ ("a" -> 1, "b" -> 2, "c" -> 3)? Tôi nghĩ rằng nó sẽ làm việc với toMap.Scala Chuyển đổi thành Bản đồ
Trả lời
zipWithIndex
có lẽ là những gì bạn đang tìm kiếm. Nó sẽ lấy bộ sưu tập các chữ cái của bạn và tạo một bộ sưu tập mới các bộ dữ liệu, giá trị phù hợp với vị trí trong bộ sưu tập. Tuy nhiên, bạn có thêm yêu cầu - có vẻ như vị trí của bạn bắt đầu bằng 1, thay vì 0, vì vậy bạn sẽ cần chuyển đổi các Tuples đó:
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
Một xem xét bổ sung - Bộ không giữ nguyên vị trí. Xem xét sử dụng cấu trúc như Danh sách nếu bạn muốn vị trí trên luôn hoạt động ổn định.
Đó là những gì tôi muốn. Cảm ơn. –
toMap chỉ hoạt động nếu Set seties là cặp khóa/giá trị (ví dụ: Set (("a", 1), ("b", 2), ("c", 3))). Để có được những gì bạn muốn, sử dụng zipWithIndex:
scala> Set("a","b","c") zipWithIndex
res5: scala.collection.immutable.Set[(java.lang.String, Int)] = Set((a,0), (b,1), (c,2))
EDIT: hoặc (như trong bạn gốc câu hỏi :))
scala> Set("a","b","c") zip (1 to 3) toMap
EDIT2: Duh, tôi quên toMap ở cuối!
Dưới đây là một giải pháp có sử dụng một Stream
của tất cả các số tự nhiên bắt đầu từ 1 đến được nén với Set
của bạn:
scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))
+1, đây là câu trả lời hay nhất ở đây. – missingfaktor
này cũng sẽ làm việc:
(('a' to 'c') zip (1 to 3)).toMap
- 1. Chuyển đổi Bản đồ Scala thành Danh sách
- 2. Chuyển đổi Bản đồ Java thành Bản đồ Javascript
- 3. Chuyển đổi Java Map để Scala Bản đồ
- 4. Chuyển đổi bản đồ Scala chứa bản đồ Boolean sang Java chứa java.lang.Boolean
- 5. Chuyển đổi bản đồ có thể biến đổi thành bản đồ không thể thay đổi
- 6. Trong Scala, có cách nào để chuyển đổi hai danh sách thành Bản đồ không?
- 7. Làm thế nào để bạn chuyển đổi một java.util.Collections.unmodifiableMap thành một bản đồ Scala bất biến?
- 8. Chuyển đổi Scala thành Java (java.util.Set)?
- 9. Java: Cách chuyển đổi Danh sách thành Bản đồ
- 10. clojure chuyển đổi lazy-seq thành bản đồ băm
- 11. Scala: Chuyển đổi org.w3c.dom.Document thành scala.xml.NodeSeq
- 12. Chuyển đổi Iterator Scala thành Vector
- 13. Cách chuyển danh sách các đối tượng thành bản đồ của hai trường trong Scala
- 14. Làm thế nào tôi có thể chuyển đổi Scala Bản đồ sang Java Bản đồ với scala.Float để java.Float k/v chuyển đổi
- 15. Scala Bản đồ foreach
- 16. Idiomatic Scala Bản đồ upsert
- 17. Làm thế nào để chuyển đổi bản đồ này/flatMap thành một sự hiểu biết trong Scala?
- 18. Chuyển đổi danh sách của Scala vào bản đồ với indicies như phím
- 19. Cách chuyển đổi từ từ java.util.Map sang một Bản đồ Scala
- 20. Tự động chuyển đổi mã Scala thành mã Java
- 21. Chuyển đổi một vector của bản đồ tới bản đồ bản đồ trong Clojure
- 22. Scala foldLeft trên Bản đồ
- 23. Tôi có thể "chuyển đổi" danh sách bản đồ thành bản đồ danh sách trong Clojure không?
- 24. Chuyển đổi Ngày thành Dấu thời gian trong Scala
- 25. Tùy chọn chuyển đổi [T] thành Option [U] trong Scala
- 26. scala foreach và bản đồ initializers
- 27. Chuyển đổi bảng HTML thành văn bản
- 28. Chuyển đổi âm thanh thành văn bản
- 29. Postgres: Chuyển đổi varchar thành văn bản
- 30. Làm thế nào để chuyển đổi một Seq [A] thành một bản đồ [Int, A] bằng cách sử dụng giá trị của A làm khóa trong bản đồ?
Bạn có muốn b để lập bản đồ đến 2 vì nó là thứ hai trong Set? Hoặc bởi vì nó là chữ cái thứ hai trong bảng chữ cái? Bộ không được đặt hàng, như các áp phích khác đã chỉ ra, vì vậy đầu tiên sẽ không hoạt động. –