Если вы хотите удалить массивы, которые содержат элемент first массива first в любой позиции, это будет простой Array#reject
, что-тонапример:
multi_array.reject { |arr| arr != multi_array[0] && arr.include?(multi_array[0][0]) }
Здесь вы создаете новый массив, отклоняя любой элемент multi_array
, который не является первым членом и также содержит это значение.
irb(main):001:0> multi_array = [%w[Jack Fred Jane], %w[Paul Matthew Gina], %w[Jack Bart Hector], %w[John Veronica Nicole], %w[Marcella Vianka Richard]]
=> [["Jack", "Fred", "Jane"], ["Paul", "Matthew", "Gina"], ["Jack", "Bart", "Hector"], ["John", "Veronica", "Nicole"], ["Marcella", "Vianka", "Richard"]]
irb(main):016:0> multi_array.reject { |arr| arr != multi_array[0] && arr.include?(multi_array[0][0]) }
=> [["Jack", "Fred", "Jane"], ["Paul", "Matthew", "Gina"], ["John", "Veronica", "Nicole"], ["Marcella", "Vianka", "Richard"]]
РЕДАКТИРОВАТЬ:
Это мой первый ответ, который предполагал, что вы хотите удалить вложенный массив, если он имеет дубликат любого значения из любого предыдущего вложенного массива.
Вы можете использовать #each_with_object
для построения результата только тех массивов, которые не имеют дублированных значений из предыдущих массивов, например:
multi_array.each_with_object([]) { |a, result| result << a unless a.any? { |b| result.flatten.include?(b) } }
Вы проходите через массивы идобавляя каждый к результату, пока ни одно из его значений уже не находится в сглаженном результате.
irb(main):004:0> multi_array.each_with_object([]) { |a, result| result << a unless a.any? { |b| result.flatten.include?(b) } }
=> [["Jack", "Fred", "Jane"], ["Paul", "Matthew", "Gina"], ["John", "Veronica", "Nicole"], ["Marcella", "Vianka", "Richard"]]
Здесь я добавляю «Richard» ко второму массиву, и вы можете видеть, что оба «Jack» оба"и второй массив" Ричард "удаляются.
irb(main):009:0> multi_array = [%w[Jack Fred Jane], %w[Paul Matthew Richard], %w[Jack Bart Hector], %w[John Veronica Nic ole], %w[Marcella Vianka Richard]]
=> [["Jack", "Fred", "Jane"], ["Paul", "Matthew", "Richard"], ["Jack", "Bart", "Hector"], ["John", "Veronica", "Nicole"], ["Marcella", "Vianka", "Richard"]]
irb(main):010:0> multi_array.each_with_object([]) { |a, result| result << a unless a.any? { |b| result.flatten.include?(b) } }
=> [["Jack", "Fred", "Jane"], ["Paul", "Matthew", "Richard"], ["John", "Veronica", "Nicole"]]