如何获得哈希散列哈希?
我的测试返回
未定义的方法`[]'为nil:NilClass(NoMethodError)
任何提示?
found = Hash.new()
x = 1;
while x < 4 do
found[x] = Hash.new()
y = 1
while y < 4 do
found[x][y] = Hash.new()
found[x][y]['name1'] = 'abc1'
found[x][y]['name2'] = 'abc2'
found[x][y]['name3'] = 'abc3'
y += 1
end
x += 1
end
found.each do |k, v, y|
puts "k : #{k}"
puts " : #{v[y['name1']]}"
puts " : #{v[y['name2']]}"
puts " : #{v[y['name3']]}"
puts
end
答案 0 :(得分:2)
构建哈希的方式似乎是有用的。可能导致错误的是这个循环:
found.each do |k, v, y|
Hash#each
会产生键/值对,因此y
将被分配nil
,从而导致错误两行以下。您可能意味着像
found.each do |x, h1|
h1.each do |y, h2|
puts h2['name1']
end
end
您还应该知道,您可以在Ruby中更简洁地编写这些类型的计数循环:
found = Hash.new { |h,k| h[k] = {} }
1.upto(3) do |x|
1.upto(3) do |y|
found[x][y] = {
'name1' => 'abc1',
'name2' => 'abc2',
'name3' => 'abc3',
}
end
end
答案 1 :(得分:2)
我想你想要这样的东西:
首先创建数据结构。您需要嵌套哈希,因此您需要为每个哈希键定义默认值。
found = Hash.new do |hash,key|
hash[key] = Hash.new do |hash,key|
hash[key] = Hash.new
end
end
运行搜索
(1..3).each do |x|
(1..3).each do |y|
found[x][y]['name1'] = 'abc1'
found[x][y]['name2'] = 'abc1'
found[x][y]['name3'] = 'abc1'
end
end
然后显示结果
found.each do |x, y_hash|
y_hash.each do |y, name_hash|
name_hash.each do |name, value|
puts "#{x} => #{y} => #{name} => #{value}"
end
end
end