106

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)

しかし、うまくいきません。だから私は良い簡単な解決策に興味があります。

4

4 に答える 4

232
rows.sortBy(r => (r.lastName, r.firstName))
于 2012-04-05T11:25:09.890 に答える
14
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)
                               ^
于 2012-04-05T11:20:19.160 に答える
8

一般に、安定したソート アルゴリズムを使用する場合は、1 つのキーでソートし、次に次のキーでソートすることができます。

rows.sortBy(_.firstName).sortBy(_.lastName)

最終的な結果は姓でソートされ、それが等しい場合は姓でソートされます。

于 2012-04-05T11:21:15.167 に答える