【问题标题】:Scala TreeMap strangeness; implementing a reverse-order orderingScala TreeMap 奇怪;实现逆序排序
【发布时间】:2009-12-01 17:29:34
【问题描述】:

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

【问题讨论】:

    标签: scala scala-collections treemap


    【解决方案1】:

    棘手。让我们运行一下排序:

    scala> (-3L).compare(1L)
    res13: Int = -1
    
    scala> (-1L).compare(2L)
    res14: Int = -1
    

    因此,我们得出 3

    def compare(a: Long) = -l.compare(a)
    

    好吧,让我们在这里加上一些括号,以确保我们知道我们在做什么

    def compare(a: Long) = -(l.compare(a))
    

    好的,那么答案很明确。您正在反转compare 的结果,这就是它起作用的原因。这和你第一次做的不一样。

    【讨论】:

    • 我假设视图被应用于键作为比较的目标和参数(即(-3L).compare(-1L)
    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多