1

我有一个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)
4

1 回答 1

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,这就是它起作用的原因。这和你第一次做的不一样。

于 2009-12-01T18:25:01.567 回答