我对排序集有两个困惑,
如果我们不为元素提供排序,并且元素没有默认排序(如整数或字符串),那么底层排序集如何排序?
如果我们定义了排序,那么相等性的比较如何呢?使用默认的相等方法还是比较方法中定义的方法?
谢谢
我对排序集有两个困惑,
如果我们不为元素提供排序,并且元素没有默认排序(如整数或字符串),那么底层排序集如何排序?
如果我们定义了排序,那么相等性的比较如何呢?使用默认的相等方法还是比较方法中定义的方法?
谢谢
如果Ordering
实例化 a 时范围内没有SortedSet
,那就是编译错误。
在 REPL 中尝试:
scala> collection.SortedSet[Object]()
<console>:8: error: No implicit Ordering defined for Object.
collection.SortedSet[Object]()
^
Ordering
定义平等。从scaladoc:
def equiv(x: T, y: T): 布尔值
如果 x == y 在排序中返回 true。
首先,如果您不提供排序并且没有可用的默认排序,您将收到编译器错误:
case class DoesntWork(i:Int)
//error: No implicit Ordering defined for DoesntWork.
val doesntWork = SortedSet(DoesntWork(1), DoesntWork(2))
其次,我对您在这里要说的内容感到困惑,但是您需要为自定义类型实现自己的比较功能:
implicit val worksNowOrdering = new Ordering[DoesntWork]{
def compare(x: DoesntWork, y: DoesntWork): Int = {
if (x.i < y.i) -1
else if (x.i > y.i) 1
else 0
}
}
如果您不提供 Ordering 并且在您想要存储在 SortedSet 中的元素类型的隐式范围内找不到任何内容,则它将无法编译。
我不确定,但我打赌 ==,这将是默认值