首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Scala中按两个字段对列表进行排序?

如何在Scala中按两个字段对列表进行排序?
EN

Stack Overflow用户
提问于 2012-04-05 19:16:41
回答 4查看 63K关注 0票数 105

如何在Scala中按两个字段对列表进行排序,在本例中,我将按lastName和firstName排序?

代码语言:javascript
复制
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)

我尝试过这样的事情

代码语言:javascript
复制
rows.sortBy(_.lastName + _.firstName)

但它不起作用。所以我很好奇,想要一个好的、简单的解决方案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-05 19:25:10

代码语言:javascript
复制
rows.sortBy(r => (r.lastName, r.firstName))
票数 230
EN

Stack Overflow用户

发布于 2012-04-05 19:20:19

代码语言:javascript
复制
rows.sortBy (row => row.lastName + row.firstName)

如果您要按合并的名称排序,如您的问题所示,或者

代码语言:javascript
复制
rows.sortBy (row => (row.lastName, row.firstName))

如果您首先想要按lastName排序,那么firstName;适用于较长的名称(Wild、Wilder、Wilderman)。

如果你写

代码语言:javascript
复制
rows.sortBy(_.lastName + _.firstName)

使用两个下划线,该方法需要两个参数:

代码语言:javascript
复制
<console>:14: error: wrong number of parameters; expected = 1
       rows.sortBy (_.lastName + _.firstName)
                               ^
票数 14
EN

Stack Overflow用户

发布于 2012-04-05 19:21:15

一般来说,如果您使用稳定的排序算法,您可以只按一个键排序,然后按下一个键排序。

代码语言:javascript
复制
rows.sortBy(_.firstName).sortBy(_.lastName)

最终结果将按姓氏排序,然后在相等的情况下按名字排序。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10027543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档