为什么在 Groovy 中,当我创建 2 个列表时,如果我执行 a.intersect(b) 和 b.intersect(a) 会有区别:
def list1 = ["hello", "world", "world"];
def list2 = ["world", "world", "world"];
println( "Intersect list1 with list2: " + list1.intersect( list2 ) );
println( "Intersect list2 with list1: " + list2.intersect( list1) );
痕迹:
Intersect list1 with list2: [world, world, world]
Intersect list2 with list1: [world, world]
(如果你想测试它,你可以在这里复制它:http ://groovyconsole.appspot.com/)
如果数组都包含唯一元素,那么它可以正常工作。一旦开始添加重复项,就会变得很奇怪:
def list1 = ["hello", "world", "test", "test"];
def list2 = ["world", "world", "world", "test"];
println( "Intersect list1 with list2: " + list1.intersect( list2 ) );
println( "Intersect list2 with list1: " + list2.intersect( list1 ) );
痕迹:
Intersect list1 with list2: [world, world, world, test]
Intersect list2 with list1: [world, test, test]
我认为重点intersect()
是给你共同的元素,所以你把它们放在哪个顺序都没有关系?
如果不是这种情况,我怎样才能只获取公共元素(期望数组中的重复项)。例如,示例一应该返回["world", "world"]
,示例二应该返回["world", "test"]
编辑
为了澄清一点,这段代码应该测试用户数据是否仍然相同(假设他们在某事中间断开连接,我们要确保数据没有被篡改,或者处于与以前相同的状态)。
无法保证列表的顺序(用户可以对其重新排序,但从技术上讲它仍然是“相同的”),并且可能出现重复。
所以像:["one", "one", "two"]
应该匹配["two", "one", "one"]
,而列表中的任何添加或数据更改都不应该匹配。