我偶尔会发现自己想要一个非常简单的订购[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])排序。
答案 0 :(得分:6)
您可以做的事情是标准库中的方法
def by[T, S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]
例如,您可以执行以下操作:
implicit val tupleOrdering = Ordering.by[(Int, List[Int]), Int] {
_._1
}
流便
答案 1 :(得分:0)
不是本身,但您可以在通话网站上这样做。而不是说
foo.sorted()
根据您描述的顺序,您可以说
foo.sortBy(_._1)
用你想要的任何投射或更复杂的表达,例如
foo.sortBy(_._1.toLowercase)