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)
iffa
?也许有一些方法像jdk8中的:Comparator.comparating
。当然,要么定义一个虚拟的隐式值order:Ordering[Cls]=新排序[Cls]{…}
说两个Cls
总是相等的,要么更新我回答中的定义,只使用\u1
。我知道这不是问题,但是您可以使用m.maxBy(u.\u 1)。\u 1
,甚至可以使用您的Map
已经排序m.last.\u 1
。