Twi*_*ton 89 sorting functional-programming scala
如何在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)
Run Code Online (Sandbox Code Playgroud)
我尝试这样的事情
rows.sortBy(_.lastName + _.firstName)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.所以我很好奇一个好的,简单的解决方案.
sen*_*nia 201
rows.sortBy(r => (r.lastName, r.firstName))
Run Code Online (Sandbox Code Playgroud)
use*_*own 11
rows.sortBy (row => row.lastName + row.firstName)
Run Code Online (Sandbox Code Playgroud)
如果要按合并的名称排序,如问题中所示,或者
rows.sortBy (row => (row.lastName, row.firstName))
Run Code Online (Sandbox Code Playgroud)
如果你想先按lastName排序,那么firstName; 与较长的名字相关(Wild,Wilder,Wilderman).
如果你写
rows.sortBy(_.lastName + _.firstName)
Run Code Online (Sandbox Code Playgroud)
有2个下划线,该方法需要两个参数:
<console>:14: error: wrong number of parameters; expected = 1
rows.sortBy (_.lastName + _.firstName)
^
Run Code Online (Sandbox Code Playgroud)
通常,如果使用稳定的排序算法,则只需按一个键排序,然后按下一个键排序.
rows.sortBy(_.firstName).sortBy(_.lastName)
Run Code Online (Sandbox Code Playgroud)
最终结果将按姓氏排序,然后按名字排序.