我偶尔会发现自己想要一个非常简单的订购[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)
鲁本