Сначала поймите, что вы делаете и чего хотите.
Например,
a = 15.times.map { rand 6 }
#=> [1, 0, 5, 3, 1, 3, 4, 1, 3, 2, 1, 2, 4, 2, 3]
b = 15.times.map { rand 6 }
#=> [3, 3, 3, 1, 3, 1, 3, 1, 5, 1, 4, 2, 0, 0, 4]
Теперь, что ты делаешь
c = a + b
#=> [1, 0, 5, 3, 1, 3, 4, 1, 3, 2, 1, 2, 4, 2, 3, 3, 3, 3, 1, 3, 1, 3, 1, 5, 1, 4, 2, 0, 0, 4]
c - объединять только массивы независимо от содержимого, поэтому получать все значения.
Теперь
pairs = Array.new
c.uniq{|pair| pairs << pair}
Здесь uniq просто действует как итератор, означает, что если вы проверяете «pair», то он повторяет все значения «c» и вставляет эти значения в массив «pair».
отметьте это
c.uniq{|pair| puts pair}
Вот почему вы получаете все значения в массиве 'pair'.
Лучший способ найти сходство в массивах - это (a&b)
, но вы можете внести изменения в свой код следующим образом для достижения этого.
pairs = (arr1+arr2).uniq
OR
pairs = arr1 & arr2 #best and efficient way.