Подтвердить что ты не робот

Есть ли функция Ruby для выполнения операции XOR для двух наборов строк?

У меня есть два массива строк, и я хотел бы найти набор строк не в пересечении обоих. Эквивалент SETXOR в MATLAB - это то, что я хочу: http://www.mathworks.com/help/techdoc/ref/setxor.html

Я использую термин, установленный взаимозаменяемо с Array.

Конечно, я мог бы так же легко написать свои собственные за время, чтобы сформировать этот вопрос, но я подумал, что должен спросить.

4b9b3361

Ответ 1

array1 + array2 - (array1 & array2)

Это было короче, чем написать вопрос...

Кстати, у Ruby есть класс Set, поэтому лучше не использовать это слово как синоним массива.

Ответ 2

Да, как говорит Накилон, Set.

require 'set'
s = Set.new('a'..'f')
a = ['f','d','e','e','h','i'] #or any enum
p s ^ a  #=> #<Set: {"h", "i", "a", "b", "c"}>

Ответ 3

Вы всегда можете просто сделать

(array0 - array1) + (array1 - array0)

a = [1, 2, 3, 4, 5]
b = [2, 5, 8]
(a - b) + (b - a)
  # => [1, 3, 4, 8]