【问题标题】:Understanding Scala code: (-_._2)理解 Scala 代码:(-_._2)
【发布时间】:2016-03-06 01:01:15
【问题描述】:

帮助我理解这段 Scala 代码:

sortBy(-_._2)

我了解第一个下划线 (_) 是占位符。我知道_2 表示元组的第二个成员。 但是这段代码中的减号 (-) 代表什么?

【问题讨论】:

  • 我认为这与¯\_(ツ)_/¯ 运算符有关。
  • @LukasEder 很好奇这个操作员会做什么。 :-)
  • @marcospereira:通常用于捕捉和忽略(╯°□°)╯︵ ┻━┻异常

标签: scala


【解决方案1】:

倒序(即降序),你通过减去元组的第二个字段来排序

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

简单的 scala 中的一些示例:

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】:

    默认按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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多