Ruby: сравните 2 массива для совпадений и посчитайте количество совпадений - PullRequest
26 голосов
/ 16 февраля 2011

У меня есть 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 %>

Заранее спасибо ~

Ответы [ 3 ]

68 голосов
/ 16 февраля 2011

Вы можете сделать это с пересечением массива:

@array1 = ['a', 'b', 'c', 'd', 'e']
@array2 = ['d', 'e', 'f', 'g', 'h']
@intersection = @array1 & @array2

@ пересечение теперь должно быть ['d', 'e']. Затем вы можете сделать следующее:

<% if !@intersection.empty? %>
  <%= @intersection.size %> Matches Found.
<% else %>
  No Matches Found.
<% end %>
0 голосов
/ 06 июня 2017

Чтобы найти общее количество совпадений между массивами, сложите их вместе, а затем вычтите уникальный набор.Разница между длиной массива надмножеств и набором uniq будет равна количеству совпадений второго массива в первом.Этот метод работает лучше всего, если a2 - уникальный набор.

a1 = ['a','b','c','d','d','d']
a2 = ['a','d']

superset = (a1 + a2)
subset = superset.uniq

matches = superset.count - subset.count
0 голосов
/ 16 февраля 2011
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...