Scalaのリストを2つのフィールドでソートする方法。この例では、lastNameとfirstNameでソートしますか?
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)
私はこのようなことを試みます
rows.sortBy(_.lastName + _.firstName)
しかし、それは機能しません。だから私は良い簡単な解決策に興味があります。
rows.sortBy(r => (r.lastName, r.firstName))
rows.sortBy (row => row.lastName + row.firstName)
質問のように、結合された名前でソートする場合、または
rows.sortBy (row => (row.lastName, row.firstName))
最初にlastNameでソートしたい場合は、firstName;長い名前(Wild、Wilder、Wilderman)に関連します。
書くなら
rows.sortBy(_.lastName + _.firstName)
下線が2つある場合、メソッドは2つのパラメーターを予期します。
<console>:14: error: wrong number of parameters; expected = 1
rows.sortBy (_.lastName + _.firstName)
^
一般に、安定したソートアルゴリズムを使用する場合、1つのキーでソートしてから、次のキーでソートできます。
rows.sortBy(_.firstName).sortBy(_.lastName)
最終結果は姓でソートされ、次に等しい場合は名でソートされます。