Вы можете использовать group_by
для подсчета пунктов в array2
:
irb(main):001:0> array1 = [0,1,2,3]
=> [0, 1, 2, 3]
irb(main):002:0> array2 = [0,0,0,3,3,3,2,1,0,3,6,1,3]
=> [0, 0, 0, 3, 3, 3, 2, 1, 0, 3, 6, 1, 3]
irb(main):003:0> h = Hash[array2.group_by { |x| x }.map { |k, v| [k, v.size] }]
=> {0=>4, 3=>5, 2=>1, 1=>2, 6=>1}
Если хотите, вы можете извлечь вспомогательный хеш с ключами из array1
(но я не думаю, что это действительно необходимо):
irb(main):004:0> h.select { |k,_| array1.include?(k) }
=> {0=>4, 3=>5, 2=>1, 1=>2}