Я пытаюсь создать пересечение значений hash1 со значениями hash2, если эти значения имеют один и тот же ключ.Вот мой код до сих пор.Я могу генерировать два хэша -> данные и данные1.
#!/usr/bin/env ruby
require 'pp'
require 'set'
data = {}
File.read(ARGV[0]).each do |l|
l.chomp!
key, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12 = l.split(/\s+/)
data[key] ||= {}
values = [value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12]
data[key] = values.compact!
end
data1 = {}
File.read(ARGV[1]).each do |l|
l.chomp!
value = l.split(/\s+/)
data1[value[0]] ||= {}
data1[value[0]] = [value]
end
Итак, моя главная цель - для каждого ключа в hash1 сохранять только те значения, которые также присутствуют в том же ключе в hash2, в противном случае удалить эти значения из hash1.Меня не интересуют какие-либо ключи, присутствующие в Hash2, которых нет в Hash1, кстати.
Я знаю, что массивы можно пересекать с помощью «&» и «set», хотя я не смог этого сделать вмой сценарий до сих пор.
Любой совет будет отличным.Спасибо.
Для Тео:
Да.
hash1 {alpha: [a, b, c, d, e], браво: [f, g, h, i, j], Чарли: [k, l, m, n, o], дельта: [p, r]}
hash2 {alpha: [a, c, q, z], браво: [z, x], Чарли: [k, l, m, n]}
Итак, пересечение будет выглядеть так.
hash3 {alpha: [a, c], bravo: [nil], charlie: [k, l, m, n]}