2016-03-05 15 views
7

Giúp tôi hiểu mã Scala này:Hiểu đang Scala: (-_._ 2)

sortBy(-_._2) 

Tôi hiểu rằng gạch đầu tiên (_) là một giữ chỗ. Tôi hiểu rằng _2 có nghĩa là thành viên thứ hai của Tuple. Nhưng điểm số trừ (-) cho mã này là gì?

+18

Tôi nghĩ rằng nó có cái gì để làm với '¯ \ _ (ツ) _/¯' điều hành. –

+0

@LukasEder Tò mò về những gì nhà điều hành này sẽ làm. :-) – marcospereira

+3

@marcospereira: Nó thường được sử dụng để bắt và bỏ qua ngoại lệ '(□ ° □ °) ╯︵ ┻━┻' –

Trả lời

14

Xếp theo thứ tự (tức là giảm dần), bạn sắp xếp theo trừ trường thứ hai của tuple

Các dấu gạch dưới là một tham số ẩn danh, vì vậy -_ được về cơ bản giống như x => -x

Một số ví dụ trong scala đồng bằng:

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) 
4

Sắp xếp theo loại theo thứ tự ascending làm đơn đặt hàng mặc định. Để đảo ngược thứ tự, - (Trừ) có thể được thêm vào trước, như đã được giải thích bởi @TrustNoOne.

Vì vậy, sortBy(-_._2) sắp xếp theo giá trị thứ hai của số Tuple2 nhưng theo thứ tự ngược lại.

Một ví dụ nữa:

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

cũng giống như

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))