为什么sameElements为集合返回true?集合不以任何顺序放置元素。在以下两个示例中,第一个返回true,但第二个返回false。
scala> val xs1 = Set(3, 2, 1, 4, 5, 6, 7)
xs1: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 7, 3, 4)
scala> val ys1 = Set(7, 2, 1, 4, 5, 6, 3)
ys1: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 7, 3, 4)
scala> xs1 sameElements ys1
res7: Boolean = true
scala> val xt1 = Set(1, 2, 3)
xt1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> val yt1 = Set(3, 2, 1)
yt1: scala.collection.immutable.Set[Int] = Set(3, 2, 1)
scala> xt1 sameElements yt1
res8: Boolean = false
答案 0 :(得分:2)
要让scala.collection.immutable.Set.sameElements(Set)
返回true
,两个集合都需要具有相同的元素,的顺序相同。
默认的Set
实现没有排序,因此元素排序取决于存储算法和添加元素的顺序。在你的第一个例子中,排序结果纯粹是巧合。
如果您使用scala.collection.immutable.SortedSet
,则应该得到您期望的结果。
编辑:如果您只想检查两个集合是否包含相同的元素,无论顺序如何,只需使用equals即可。为了说明这一点,请尝试以下方法:
scala> val xt1 = Set(1, 2, 3)
xt1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> val yt1 = Set(3, 2, 1)
yt1: scala.collection.immutable.Set[Int] = Set(3, 2, 1)
scala> xt1 sameElements yt1
res0: Boolean = false
scala> xt1 == yt1
res1: Boolean = true
如果您需要确定排序是否与元素本身相同,那么sameElements
是有用的;否则,只需使用好的==
。