Ruby:如何迭代一个哈希项数组?

时间:2014-03-19 19:50:10

标签: ruby

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

3 个答案:

答案 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>'
>>

当然,根据您对keyvalue变量的处理方式,它可能会使您的代码更短,更易读,使用这些标准块结构之一:

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
相关问题