Scala 为什么这种排序会过滤掉集合中的元素?
代码如下:Scala 为什么这种排序会过滤掉集合中的元素?,scala,Scala,代码如下: object Test { import collection.mutable.TreeSet val myOrdering = Ordering.fromLessThan[Int](_ > _) val set1 = TreeSet(3, 2, 1, 5)(myOrdering) // 5, 3, 2, 1 val myOrdering2 = Ordering.fromLessThan[Int](_ % 3 > _ % 3) val set2 = T
object Test {
import collection.mutable.TreeSet
val myOrdering = Ordering.fromLessThan[Int](_ > _)
val set1 = TreeSet(3, 2, 1, 5)(myOrdering) // 5, 3, 2, 1
val myOrdering2 = Ordering.fromLessThan[Int](_ % 3 > _ % 3)
val set2 = TreeSet(7, 4, 2, 3, 1, 5)(myOrdering2) // TreeSet(5, 1, 3)
}
直观地说,人们会期望
set2
类似于TreeSet(5,2,7,4,1,3)
,但Scala会过滤掉“重复项”,因为5%3==2%3
等等。这是一个bug吗?不,TreeSet
也使用排序
来评估相等性Ordering.equiv
是等价的,由TreeSet
调用