我的要求是使用数组1和数组2中的每个元素遍历散列中的每个元素,并在应用所需逻辑后使用新散列。比较总是在哈希的第一个元素与数组1中的第一个元素和数组2中的第一个元素之间,依此类推,直到我完成列表。
我甚至不知道在哪里以及如何开始,所以任何帮助都能让我开始
答案 0 :(得分:1)
这是你在找什么?
arr1 = ['char', 'number', 'number', 'number', 'char', 'number', 'char']
arr2 = [6, '(7,0)','(15,0)','(5,0)',3,'(15,2)', 17]
h = { 'col1'=>'123456', 'col2'=>'0000111', 'col3'=>'000000002345',
'col4'=>'00023', 'col5'=>'abc', 'col6'=>'00000000000052367',
'col7'=>'0000000000321456' }
enum = arr1.zip(arr2).to_enum
#=> #<Enumerator: [["char", 6], ["number", "(7,0)"], ["number", "(15,0)"],
# ["number", "(5,0)"], ["char", 3], ["number", "(15,2)"], ["char", 17]]:each>
h.merge(h) { |*,v| [v].concat(enum.next) }
#=> {"col1"=>["123456", "char", 6], "col2"=>["0000111", "number", "(7,0)"],
# "col3"=>["000000002345", "number", "(15,0)"], "col4"=>["00023", "number", "(5,0)"],
# "col5"=>["abc", "char", 3], "col6"=>["00000000000052367", "number", "(15,2)"],
# "col7"=>["0000000000321456", "char", 17]}
这使用Hash#merge的形式,它使用一个块来确定合并的两个哈希中存在的键的值,这里是哈希的所有键。
答案 1 :(得分:0)
您可以使用Array#zip来混合哈希和数组:
hash = {
key1: :value1,
key2: :value2,
key3: :value3
}
array1 = %i(x1 x2 x3)
array2 = %i(y1 y2 y3)
new_hash = {}
hash.to_a.zip(array1, array2).each do |(key, value), element1, element2|
# logic with key, value, element1, and element2
# basic example :
new_hash[key] = [value, element1, element2]
end
p new_hash
# {:key1=>[:value1, :x1, :y1], :key2=>[:value2, :x2, :y2], :key3=>[:value3, :x3, :y3]}