irb> pp config
[{"file"=>"/var/tmp"},
{"size"=>"1024"},
{"modified"=>"03/28/2012"}]
=> nil
在代码中,
config.each do |d|
# then how to break d into (k, v)???
end
答案 0 :(得分:4)
config.each do |items|
items.each do |key, value|
# e.g. key="file", value="/var/tmp", etc.
end
end
答案 1 :(得分:2)
只做
config.each do |hash|
(k,v),_ = *hash
end
答案 2 :(得分:0)
受@Arup's answer启发,这是一个在并行分配中不需要额外的未使用变量的解决方案:
config.each do |hash|
key, value = hash.to_a[0]
end
to_a
将散列转换为使用splat *hash
获得的相同类型的数组,但实际上可以索引数组的第一个元素(即第一个键/值对)以这种方式使用[0]
,而使用splat (*hash)
尝试执行此操作会产生语法错误(至少在Ruby版本2.1.1中):
>> k,v = (*hash)[0]
SyntaxError: (irb):4: syntax error, unexpected ')', expecting '='
k,v = (*x)[0]
^
from c:/RailsInstaller/Ruby1.9.3/bin/irb:12:in `<main>'
>>
当然,根据您对key
和value
变量的处理方式,它可能会使您的代码更短,更易读,使用这些标准块结构之一:
config.each do |hash|
hash.each { |key,value| puts "#{key}: #{value}" }
end
# or
config.each do |hash|
hash.each do |key,value|
puts "#{key}: #{value}"
end
end