代码之家  ›  专栏  ›  技术社区  ›  neuromouse

理解Scala代码:(-_._2)

  •  9
  • neuromouse  · 技术社区  · 10 年前

    帮助我理解Scala代码:

    sortBy(-_._2)
    

    我理解第一个下划线( _ )是占位符。我明白 _2 指Tuple的第二个成员。 但是什么是负数( - )代表这个代码?

    2 回复  |  直到 10 年前
        1
  •  16
  •   Giovanni Caporaletti    10 年前

    按照相反的顺序(即降序),按元组的第二个字段减去排序

    下划线是一个匿名参数,所以-_基本上与x=>相同-x(x)

    普通标尺中的一些示例:

    scala> List(1,2,3).sortBy(-_)
    res0: List[Int] = List(3, 2, 1)
    
    scala> List("a"->1,"b"->2, "c"->3).sortBy(-_._2)
    res1: List[(String, Int)] = List((c,3), (b,2), (a,1))
    
    scala> List(1,2,3).sortBy(x => -x)
    res2: List[Int] = List(3, 2, 1)
    
        2
  •  4
  •   Andreas Neumann    10 年前

    排序依据排序依据 ascending 默认顺序。要反转顺序 - 正如@TrustNoOne已经解释的那样,(负号)可以预先加上。

    所以 sortBy(-_._2) 按 第二个值 第页,共页 Tuple2 但顺序相反。

    更长的例子:

    scala> Map("a"->1,"b"->2, "c"->3).toList.sortBy(-_._2)
    res1: List[(String, Int)] = List((c,3), (b,2), (a,1))
    

    与相同

    scala> Map("a"->1,"b"->2, "c"->3).toList sortBy { case (key,value) => - value }
    res1: List[(String, Int)] = List((c,3), (b,2), (a,1))
    
    推荐文章