如何使用复杂条件对Scala中的字符串进行排序?

时间:2015-01-06 18:52:26

标签: scala sorting

Scala中有一个字符串列表。例如:

val l1 = List("bb", "c", "ddd", "a", "dbac", "aa", "d", "abcd")

按长度排序很容易:

l1.sortWith( _.length < _.length)

但它给出了以下结果:

List(c, a, d, bb, aa, ddd, dbac, abcd)

但是如何添加二级排序参数?我希望按字母顺序排序相同长度的元素。所以结果应该是:

List(a, c, d, bb, aa, ddd, abcd, dbac)

2 个答案:

答案 0 :(得分:4)

你可以尝试

l1.sortBy(p => (p.length, p)) //> res0: List[String] = List(a, c, d, aa, bb, ddd, abcd, dbac)

答案 1 :(得分:0)

您可以通过多个字段进行排序。长度+字符串本身

  val l = List("bb", "c", "ddd", "a", "dbac", "aa", "d", "abcd")

  val ord = Ordering.by((s: String) => (s.length, s))

  println(l.sorted(ord))