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 に答える