Почему в 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"]
, тогда как любое добавление к спискам или изменение данных не должны совпадать.