在代码块参数中公开键/值对

时间:2013-06-24 11:19:44

标签: ruby hash codeblocks

是否可以从块的参数中的哈希数组中公开键/值对?

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"]

1 个答案:

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