Возможно, не самый быстрый, но, вероятно, один из самых коротких:
Hash[
keys.flatten.uniq.map{|e|
[e, keys.map{|ar| ar.count(e)}]
}
]
=> {"a"=>[2, 1], "b"=>[1, 1], "c"=>[0, 1]}
или
keys.flatten.uniq.inject({}){|acc,e|
acc.merge({e => keys.map{|ar| ar.count(e)}})
}
Вот выстрел в версии 1.8.6:
keys.flatten.uniq.inject({}){|acc,e|
acc[e] = keys.map{|ar|
ar.select{|c| c==e}.size
}
acc
}
Но тебе лучше получить этот драгоценный камень backports в ближайшее время ...;)