我想知道Arrays中是否有忽略顺序检查等式的方法。到目前为止,我确实找到了这个方法:
test("test ignoring order"){
assert(Array(1,2,4,5).sameElements(Array(1,4,2,5)))
}
但它失败的原因是顺序不一样:
org.scalatest.exceptions.TestFailedException: scala.Predef.intArrayOps(scala.Array.apply(1, 2, 4, 5)).sameElements[Int](scala.Predef.wrapIntArray(scala.Array.apply(1, 4, 2, 5))) was false
有没有什么方法可以做到这一点,在 * 数组 * 内部或外部?
编辑:我不需要对数组进行排序,我只想忽略顺序进行比较。
4条答案
按热度按时间xa9qqrwz1#
一个简单的递归就可以做到。
但@蒂姆的问题是有效的:你对这个显而易见的简单分类的解决方案有什么异议?
o4tp2gmn2#
下面将对两个数组进行排序,然后使它们相等:
注:
1.如果您正在使用
Array
以外的其他集合,则可以使用==
而不是sameElements
。1.如果其中一个数组有重复项,而另一个没有,则
array1.toSet == array2.toSet
将不起作用。vlju58qv3#
这是否按预期工作?
2skhul334#
这是一个更老的线程,但我只是有同样的问题。
所提出的答案包括排序(只对可比较对象有效)或具有O(n^2)运行时行为(和/或非平凡递归)的方法。
另一种(简单但可理解且功能强大)方法是使用Scala的diff函数:
顺便说一句,这适用于任何集合和元素类型,而不仅仅是数组和可比较对象。diff()在内部构建了一个出现计数散列Map,因此运行时行为对于更大的集合会更好。