0

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

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| 是 (hash, nil)

我想在 |key,value|的声明中得到 (symbol, string) 参数。这是可能的还是我不得不传入一个哈希并自己提取键/值对?

我知道传递哈希而不是数组会自动提供对键/值对的访问权限,但是大部分 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"]
4

1 回答 1

0

好的..如果我抓住你赖特:

array = [{:a=>'a'}, {:b=>'b'}]   
array.map {|k,v| [k,v]}
# => [[{:a=>"a"}, nil], [{:b=>"b"}, nil]]

你正在超越。但是你想要[[:a,"a"], [:b,"b"]]。不 这是不可能的。使用#eachor#map时,当您有给定的哈希数组时,您不能将块参数分配k,v:a,"a":b,"b"每次传递。

更简单地尝试你的IRB,你会看到效果:

k,v = {:a=>'a'}
p k,v 

# >> {:a=>"a"}
# >> nil
于 2013-06-24T11:31:21.810 回答