2

我偶尔会发现自己想要一个非常简单的 Ordering[A] 用于一个还没有排序的类。通常是一个元组或一个类的一个字段的投影。以下课程似乎通常这样做

case object Ord { 
  case class DerivedOrdering[A,B](fn : B=>A)(implicit o : Ordering[A]) extends Ordering[B] { 
      def compare(a:B, b:B) = o.compare(fn(a), fn(b)) 
  }
}

我还没有在 scala 库中看到它。它在某个地方吗?

用法

Ord.DerivedOrdering[Int, (Int, List[Int])]( _._1)

按整数对 (Int, List[Int]) 进行排序。

4

2 回答 2

6

您可以做一些事情,这是标准库中的一种方法

def by[T, S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]

例如,您可以执行以下操作:

implicit val tupleOrdering = Ordering.by[(Int, List[Int]), Int] {
  _._1
}

鲁本

于 2012-11-03T01:23:26.907 回答
0

本身不是,但您可以在呼叫站点这样做。而不是说

foo.sorted()

根据您描述的顺序,您可以说

foo.sortBy(_._1)

使用您希望的任何投影或更复杂的表达方式,例如

foo.sortBy(_._1.toLowercase)
于 2012-11-03T01:20:21.700 回答