scala中Tuple_2的键排序

scala中Tuple_2的键排序,scala,collections,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 } 使用键排序(Long,在我的例子中)为映射定义排序的惯用方法是什么?您可以通过导入scala.math.Ordering.\u来使用中定义的方法。以下是实施方案供参考: impl

我使用
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
}

使用键排序(
Long
,在我的例子中)为
映射定义
排序的惯用方法是什么?

您可以通过导入
scala.math.Ordering.\u
来使用中定义的方法。以下是实施方案供参考:

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
    }
  }
用于根据函数
T=>S
排序[S]
创建
排序[T]

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

将根据元组的第一个字段获取排序。排序[Long]是隐式可用的,因此不需要显式提供它。

但是
Tuple\u 2.\u 2
不是必需的。我的意思是我有
Tuple2.\u 1
的排序。通过
Tuple2.\u 1
是否有一种简明的方法来定义
排序[Tuple2]
。我的意思是
(a,b)<(c,d)
iff
a
?也许有一些方法像jdk8中的:
Comparator.comparating
。当然,要么定义一个虚拟的
隐式值order:Ordering[Cls]=新排序[Cls]{…}
说两个
Cls
总是相等的,要么更新我回答中的定义,只使用
\u1
。我知道这不是问题,但是您可以使用
m.maxBy(u.\u 1)。\u 1
,甚至可以使用您的
Map
已经排序
m.last.\u 1