cách sắp xếp danh sách trong Scala theo hai trường, trong ví dụ này tôi sẽ sắp xếp theo lastName và firstName?Cách sắp xếp danh sách trong Scala theo hai trường?
case class Row(var firstName: String, var lastName: String, var city: String)
var rows = List(new Row("Oscar", "Wilde", "London"),
new Row("Otto", "Swift", "Berlin"),
new Row("Carl", "Swift", "Paris"),
new Row("Hans", "Swift", "Dublin"),
new Row("Hugo", "Swift", "Sligo"))
rows.sortBy(_.lastName)
tôi thử những điều như thế này
rows.sortBy(_.lastName + _.firstName)
nhưng nó không hoạt động. Vì vậy, tôi tò mò cho một giải pháp tốt và dễ dàng.
điều gì xảy ra nếu chúng ta muốn đảo ngược sắp xếp trên lastName và sau đó sắp xếp tự nhiên trên firstName? –
@SachinK: bạn phải tạo ra 'thứ tự' cho lớp 'Row' của riêng bạn và sử dụng nó với phương thức' sắp xếp' như sau: 'rows.sorted (customOrdering)'. Bạn cũng có thể sử dụng 'Ordering' tùy chỉnh cho' Tuple2' như sau: 'rows.sortBy (r => (r.lastName, r.firstName)) (Ordering.Tuple2 (Ordering.String.reverse, Ordering.String))' . – senia
@SachinK: Bạn có thể thực hiện 'customOrdering' thành' Ordering [Row] 'theo cách thủ công hoặc sử dụng' Ordering.by' như sau: 'val customOrdering =' Ordering.by ((r: Row) => (r.lastName, r .firstName)) (Ordering.Tuple2 (Ordering.String.reverse, Ordering.String)) ' – senia