我有一个Map[Long, String]
,我想按键的降序迭代。我选择这样做的方式如下:
var m: SortedMap[Long, String] = TreeMap.empty( (l: Long) => -l)
m ++= Map(2L -> "Hello", 1L -> "World", 3L -> "Chris")
println(m) //Map(3 -> Chris, 1 -> World, 2 -> Hello)
我真的不确定我理解为什么这不起作用,只能假设我犯了一些愚蠢的错误。当然以下工作:
var m: SortedMap[Long, String] = TreeMap.empty( (l: Long) => new Ordered[Long] {
def compare(a: Long) = -l.compare(a)
})
m ++= Map(2L -> "Hello", 1L -> "World", 3L -> "Chris")
println(m) //Map(3 -> Chris, 2 -> Hello, 1 -> World)
答案 0 :(得分:4)
棘手。让我们运行那个排序:
scala> (-3L).compare(1L)
res13: Int = -1
scala> (-1L).compare(2L)
res14: Int = -1
因此,我们得出结论,3< 1< 2.这引出了以下原因的问题:
def compare(a: Long) = -l.compare(a)
好吧,我们在那里加上一些括号,以确保我们知道我们在做什么
def compare(a: Long) = -(l.compare(a))
好的,答案很清楚。您正在反转compare
的结果,这就是它的工作原理。这与你第一次做的不同。