如何在Scala中按两个字段对列表进行排序,在本例中,我将按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)
但它不起作用。所以我很好奇,想要一个好的、简单的解决方案。
发布于 2012-04-05 19:25:10
rows.sortBy(r => (r.lastName, r.firstName))
发布于 2012-04-05 19:20:19
rows.sortBy (row => row.lastName + row.firstName)
如果您要按合并的名称排序,如您的问题所示,或者
rows.sortBy (row => (row.lastName, row.firstName))
如果您首先想要按lastName排序,那么firstName;适用于较长的名称(Wild、Wilder、Wilderman)。
如果你写
rows.sortBy(_.lastName + _.firstName)
使用两个下划线,该方法需要两个参数:
<console>:14: error: wrong number of parameters; expected = 1
rows.sortBy (_.lastName + _.firstName)
^
发布于 2012-04-05 19:21:15
一般来说,如果您使用稳定的排序算法,您可以只按一个键排序,然后按下一个键排序。
rows.sortBy(_.firstName).sortBy(_.lastName)
最终结果将按姓氏排序,然后在相等的情况下按名字排序。
https://stackoverflow.com/questions/10027543
复制相似问题