Это даст вам общие значения:
shared = hash1.keep_if { |k, v| hash2.key? k }
И их вы можете напечатать так, как вам нравится. Не знаю, хотите ли вы напечатать ключи, значения или оба, но как вам нравится:
shared.each_pair { |k, v| print k, v }
Очевидно, что вы можете объединить эти два фрагмента в одну команду, но для ясности они равны 2.
EDIT:
Просто заметил, что вы хотели в качестве массива. Если вы хотели только значения:
array = hash1.keep_if { |k, v| hash2.key? k }.values
Спасибо за совет - я пробовал это:
shared = Hash.new
grouped = hostArray.group_by{|row| [row[:server_host]]}
filtered = grouped.values.select { |a| a.size > 1 }.flatten
filtered.each do |element|
element.each do |key, value|
shared = element.keep_if { |k, v| element.key? k }
end
shared.each_pair { |k, v| print k," ", v, "\n" }
конец
но этот вывод все еще неправильный - я думаю, что я ссылался на 'hash2' неправильно? это правильно?