通过键在scala中订购Tuple_2

时间:2017-03-20 17:11:28

标签: scala collections

我使用SortedMap如下:

class Cls
val m = SortedMap[Long, Cls]()

def m = {
    val v = m.max._1 //no implicit ordering defined for (Long, Cls)
    //do some with it
}

使用键排序(Ordering在我的案例中)为Map定义Long的惯用方法是什么?

2 个答案:

答案 0 :(得分:4)

使用Ordering.by根据功能Ordering[T]T => S创建Ordering[S]

Ordering.by((t: (Long, Cls)) => t._1)

将根据元组的第一个字段为您提供排序。订购[Long]隐式可用,因此无需明确提供。

答案 1 :(得分:1)

您可以通过导入scala.math.Ordering._来使用scala.math.Ordering companion object中的定义。作为参考,这是实现:

implicit def Tuple2[T1, T2](implicit ord1: Ordering[T1], ord2: Ordering[T2]): Ordering[(T1, T2)] =
  new Ordering[(T1, T2)]{
    def compare(x: (T1, T2), y: (T1, T2)): Int = {
      val compare1 = ord1.compare(x._1, y._1)
      if (compare1 != 0) return compare1
      val compare2 = ord2.compare(x._2, y._2)
      if (compare2 != 0) return compare2
      0
    }
  }