我使用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
的惯用方法是什么?
答案 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
}
}