斯卡拉地图排序
答
一种方法是使用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:_*)
你可以将其转换为一个序列或列表和排序它,太:
//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
有很多的可能性,每种方式在某种情况下或多或少方便。
答
如前所述,默认Map
类型是无序的,但总有SortedMap
import collection.immutable.SortedMap
SortedMap("01" -> List(34,12,14,23), "11" -> List(22,11,34))
虽然我猜你不能使用,因为我认识到这一点功课,并怀疑您的地图是结果的一组操作。所以,你必须创建一个空的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:_*)
或者,如果你不拘泥于Map
界面,你可以将其转换为一个元组的序列。请注意,只有在键和值都具有定义的顺序时,此方法才有效。列表没有定义默认顺序,所以这不适用于您的示例代码 - 我因此改为创建其他数字。
val unsorted = Map("01" -> 56, "11" -> 34)
val sorted = unsorted.toSeq.sorted
,如果你可以先转换您的列表,以一些其他类型(如字符串),这是最好的使用mapValues
更新完成,这可能是有用的:见Landei的答案,它展示了如何你可以提供一个定制的排序功能,使这种方法的工作。
您是否需要将结果作为另一张地图,或者您是否只希望在用于排序时忘记密钥? – 2011-01-25 12:42:13
我需要结果在另一张地图。 – 2011-01-25 12:42:54