rails - поиск пересечений между несколькими массивами - PullRequest
66 голосов
/ 07 июля 2010

Я пытаюсь найти значения пересечения между несколькими массивами.

например

code1 = [1,2,3]
code2 = [2,3,4]
code3 = [0,2,6]

Таким образом, результат будет 2

Я знаю, в PHP вы можетесделать это с помощью array_intersect

Я хотел иметь возможность легко добавлять дополнительный массив, поэтому я не хочу использовать несколько циклов

Есть идеи?

Спасибо, Алекс

Ответы [ 2 ]

107 голосов
/ 07 июля 2010

Используйте метод & для Array , который предназначен для пересечения заданных значений.

Например:

> [1,2,3] & [2,3,4] & [0,2,6]
=> [2]
45 голосов
/ 12 февраля 2013

Если вам нужен более простой способ сделать это с массивом массивов неизвестной длины, вы можете использовать команду inject.

> arrays = [code1,code2,code3]
> arrays.inject(:&)                   # Ruby 1.9 shorthand
=> [2]
> arrays.inject{|codes,x| codes & x } # Full syntax works with 1.8 and 1.9
=> [2]
...