scala中的派生订单?

Joh*_*ier 2 scala

我偶尔会发现自己想要一个非常简单的订购[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)) 
  }
}
Run Code Online (Sandbox Code Playgroud)

我没有在scala库中看到它.它在某处吗?

用法

Ord.DerivedOrdering[Int, (Int, List[Int])]( _._1)
Run Code Online (Sandbox Code Playgroud)

按整数排序(Int,List [Int])排序.

小智 6

您可以做的事情是标准库中的方法

def by[T, S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]
Run Code Online (Sandbox Code Playgroud)

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

implicit val tupleOrdering = Ordering.by[(Int, List[Int]), Int] {
  _._1
}
Run Code Online (Sandbox Code Playgroud)

鲁本