comment trier une liste dans Scala par deux champs, dans cet exemple, je vais trier par nom et prénom?
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)
J'essaie des choses comme ça
rows.sortBy(_.lastName + _.firstName)
mais ça ne marche pas. Je suis donc curieux de trouver une solution simple et efficace.
rows.sortBy(r => (r.lastName, r.firstName))
rows.sortBy (row => row.lastName + row.firstName)
Si vous souhaitez trier les noms fusionnés, comme dans votre question, ou
rows.sortBy (row => (row.lastName, row.firstName))
si vous voulez d'abord trier par nom, puis prénom; pertinent pour les noms plus longs (Wild, Wilder, Wilderman).
Si vous écrivez
rows.sortBy(_.lastName + _.firstName)
avec 2 soulignements, la méthode attend deux paramètres:
<console>:14: error: wrong number of parameters; expected = 1
rows.sortBy (_.lastName + _.firstName)
^
En général, si vous utilisez un algorithme de tri stable, vous pouvez simplement trier une clé, puis la suivante.
rows.sortBy(_.firstName).sortBy(_.lastName)
Le résultat final sera trié par nom de famille, puis égal à, par prénom.