Lan*_*dei 61
一种方法是使用scala.collection.immutable.TreeMap,它总是按键排序:
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:_*)
Run Code Online (Sandbox Code Playgroud)
您也可以将其转换为Seq或List并对其进行排序:
//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
Run Code Online (Sandbox Code Playgroud)
有很多可能性,在某些情况下或多或少都很方便.
Kev*_*ght 16
如上所述,默认Map类型是未排序的,但始终存在SortedMap
import collection.immutable.SortedMap
SortedMap("01" -> List(34,12,14,23), "11" -> List(22,11,34))
Run Code Online (Sandbox Code Playgroud)
虽然我猜你不能使用它,因为我认识到这个功课并怀疑你的地图是groupBy操作的结果.所以你必须创建一个空的SortedMap并添加值:
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:_*)
Run Code Online (Sandbox Code Playgroud)
或者,如果您不熟悉Map界面,则可以将其转换为一系列元组.请注意,只有在键和值都具有已定义的顺序时,此方法才有效.列表没有定义默认顺序,因此这不适用于您的示例代码 - 因此我编写了一些其他数字.
val unsorted = Map("01" -> 56, "11" -> 34)
val sorted = unsorted.toSeq.sorted
Run Code Online (Sandbox Code Playgroud)
如果您可以先将列表转换为其他类型(如String),这可能很有用,最好使用 mapValues
更新: 请参阅Landei的答案,其中显示了如何提供自定义排序功能,以使此方法有效.