Groovy: Разница с A. INSERSECT (B) и B. Internersect (A)

Почему в Groovy, когда я создаю 2 списка, есть ли разница, если я делаю A. INTERSECT (B) и B. Отслеживать (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://grovyconsole.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]

Я думал, что весь смысл пересекается () должен был дать вам общие элементы, так что это не имеет значения, в каком порядке их показать?

Если это не так, как я могу получить только общие элементы (ожидайте дубликатов в массиве). Например, пример нужно вернуть [«Мир», «мир»] и пример два Должен вернуться [«World», «Test»]

Редактировать

, чтобы немного уточнить, этот код должен проверить, что данные пользователя все еще одинаковы (предполагая, что они отключены в середине чего-либо, и мы хотим Убедитесь, что данные не были подделаны, или находится в том же состоянии, что и раньше).

Порядок списков не может быть гарантирован (пользователь может перенаправить его, но это все еще технически «так же»), и возможны дубликаты.

Так что-то вроде: [«один», «один», «два»] должен совпадать [«два», «один», «один»] , тогда как любой Дополнение к спискам или изменение данных не должно совпадать.

7
задан divillysausages 12 September 2011 в 13:27
поделиться