Ruby: Сравнить 2 массива для совпадений и подсчитать количество экземпляров совпадений
У меня есть 2 массива:
@array1 = [a,b,c,d,e]
@array2 = [d,e,f,g,h]
Я хочу сравнить два массива, чтобы найти совпадения (d, e) и подсчитать количество найденных совпадений (2)?
<% if @array2.include?(@array1) %>
# yes, but how to count instances?
<% else %>
no matches found...
<% end %>
Заранее спасибо ~
Ответы
Ответ 1
Вы можете сделать это с помощью пересечения массива:
@array1 = ['a', 'b', 'c', 'd', 'e']
@array2 = ['d', 'e', 'f', 'g', 'h']
@intersection = @array1 & @array2
@intersection теперь должно быть ['d', 'e']. Затем вы можете сделать следующее:
<% if [email protected]? %>
<%= @intersection.size %> Matches Found.
<% else %>
No Matches Found.
<% end %>
Ответ 2
class Array
def dup_hash
inject(Hash.new(0)) { |h,e| h[e] += 1; h }.select {
|k,v| v > 1 }.inject({}) { |r, e| r[e.first] = e.last; r }
end
end
Сначала вы просто добавляете оба массива
@array_sum = @array1 + @array2
output = [a,b,c,d,e,d,e,f,g,h]
@array_sum.dub_hash => {d => 2, e => 2}
Или проверьте Как подсчитать дубликаты в Ruby Arrays
Ответ 3
Чтобы найти количество общих совпадений между массивами, добавьте их вместе, а затем вычтите уникальный набор. Разница между длиной массива superset и набором uniq будет равна счету совпадений второго массива в первом. Этот метод работает лучше всего, если a2 - уникальный набор.
a1 = ['a','b','c','d','d','d']
a2 = ['a','d']
superset = (a1 + a2)
subset = superset.uniq
matches = superset.count - subset.count