Scala按多个值排序

时间:2015-08-03 02:41:50

标签: scala

我正在尝试将Ordering[T]用于多种类型。

case class Person(name: String, age: Int)

Person("Alice", 20)
Person("Bob", 40)
Person("Charlie", 30)

object PersonOrdering extends Ordering[Person] {
  def compare(a:Person, b:Person) =
    a.age compare b.age
}

如何按姓名和年龄排序?

集合需要保持按更新排序。

2 个答案:

答案 0 :(得分:7)

按名称和年龄的元组排序。

此外,通常更容易致电Ordering.by而不是自己延长Ordering

case class Person(name: String, age: Int)

implicit val personOrdering: Ordering[Person] =
  Ordering.by(p => (p.name, p.age))

Seq(Person("a", 2), Person("b", 1), Person("a", 1)).sorted
// Seq[Person] = List(Person(a,1), Person(a,2), Person(b,1))

答案 1 :(得分:3)

你可以制作一个元组并对其进行排序:

val people = List(
Person("Alice", 20),
Person("Bob", 40),
Person("Charlie", 30)
)

people.orderBy(x => (x.name,x.age))

如果扩展Ordering应该是相同的,制作一个元组并进行比较