是否可以从块的参数中的哈希数组中公开键/值对?
array = [{:a=>'a'}, {:b=>'b'}] # an array of hashes
array.each {|key, value| puts "#{key},#{value}"}
array.map {|key, value| "(#{key},#{value})"}
array.inject([]) {|accum, (key,value)| key == :a ? value : accum}
目前代码块参数的结果|键,值|是(哈希,零)
我想在| key,value |的声明中得到(符号,字符串)参数。这是可能的还是我不得不传递一个哈希并自己提取键/值对?
我知道传递哈希而不是数组会自动提供对键/值对的访问,但Ruby的大部分返回数组。
更新:似乎有可能是数组,但不是哈希?
a = [['a','b'],['c','d']]
a.each {|(x,y)| puts "#{x}=>#{y}"} # => a=>b
# => c=>d
a.each {|x| p x} # => ["a", "b"]
# => ["c", "d"]
答案 0 :(得分:0)
好的..如果我抓住你的话:
array = [{:a=>'a'}, {:b=>'b'}]
array.map {|k,v| [k,v]}
# => [[{:a=>"a"}, nil], [{:b=>"b"}, nil]]
你已经超越了。但是你想要[[:a,"a"], [:b,"b"]]
。不,这是不可能的。使用#each
或#map
时,如果您拥有类似于给定的哈希数组,则无法将块参数k,v
分配为:a,"a"
和:b,"b"
通过。
更简单地试试你的IRB
,你会看到效果:
k,v = {:a=>'a'}
p k,v
# >> {:a=>"a"}
# >> nil