Làm thế nào để sắp xếp một bản đồ của loại hình này:đồ Scala sắp xếp
"01" -> List(34,12,14,23), "11" -> List(22,11,34)
bởi các giá trị đầu?
Làm thế nào để sắp xếp một bản đồ của loại hình này:đồ Scala sắp xếp
"01" -> List(34,12,14,23), "11" -> List(22,11,34)
bởi các giá trị đầu?
Một cách là sử dụng scala.collection.immutable.TreeMap, mà luôn luôn được sắp xếp theo phím:
val t = TreeMap("01" -> List(34,12,14,23), "11" -> List(22,11,34))
//If you have already a map...
val m = Map("01" -> List(34,12,14,23), "11" -> List(22,11,34))
//... use this
val t = TreeMap(m.toSeq:_*)
Bạn có thể chuyển nó sang một Seq hoặc Danh sách và sắp xếp nó, quá:
//by specifying an element for sorting
m.toSeq.sortBy(_._1) //sort by comparing keys
m.toSeq.sortBy(_._2) //sort by comparing values
//by providing a sort function
m.toSeq.sortWith(_._1 < _._1) //sort by comparing keys
Có nhiều khả năng, mỗi khả năng thuận tiện hơn trong một ngữ cảnh nhất định.
Bạn cũng có thể nối thêm một chuỗi được sắp xếp tùy ý vào một 'LinkedHashMap', thứ sẽ giữ lại thứ tự chèn để truyền tải. –
heh heh, chỉ cần cập nhật câu trả lời của tôi để sử dụng '.toseq: _ *', không phát hiện ra rằng bạn đã thực hiện nó! Hứa tôi không ăn cắp :) –
TreeMap với toSeq rất hữu ích. –
Như đã trình bày, các loại mặc định Map
là không được phân loại, nhưng luôn có SortedMap
import collection.immutable.SortedMap
SortedMap("01" -> List(34,12,14,23), "11" -> List(22,11,34))
Mặc dù tôi đoán bạn không thể sử dụng, vì tôi nhận ra bài tập về nhà này và nghi ngờ rằng bản đồ của bạn là kết quả của một hoạt động groupBy. Vì vậy, bạn phải tạo một SortedMap trống và thêm các giá trị:
val unsorted = Map("01" -> List(34,12,14,23), "11" -> List(22,11,34))
val sorted = SortedMap.empty[String, List[Int]] ++ unsorted
//or
val sorted = SortedMap(unsorted.toSeq:_*)
Hoặc nếu bạn không gắn bó với giao diện Map
, bạn chỉ có thể chuyển nó sang một chuỗi các tuples. Lưu ý rằng phương pháp này sẽ chỉ hoạt động nếu cả khóa và giá trị đều có thứ tự được xác định. Danh sách không có thứ tự mặc định được xác định, do đó, điều này sẽ không hoạt động với mã ví dụ của bạn - do đó, tôi đã tạo một số số khác thay thế.
val unsorted = Map("01" -> 56, "11" -> 34)
val sorted = unsorted.toSeq.sorted
Điều này có thể hữu ích nếu bạn lần đầu tiên có thể chuyển đổi danh sách của bạn đối với một số loại khác (chẳng hạn như một String), được thực hiện tốt nhất sử dụng mapValues
update: Xem Landei của câu trả lời, trong đó cho thấy như thế nào bạn có thể cung cấp chức năng sắp xếp tùy chỉnh để làm cho phương pháp này hoạt động.
Bạn có cần kết quả là một bản đồ khác hay bạn chỉ muốn quên các khóa khi chúng đã được sử dụng để sắp xếp? –
Tôi cần kết quả trong một bản đồ khác. –
tôi nghĩ rằng bản đồ được phân loại theo định nghĩa, phải không? – coubeatczech