是否有一种以下列方式在ruby中重新映射哈希的简单方法:
从:
{:name => "foo", :value => "bar"}
为:
{"foo" => "bar"}
最好以一种方式,在迭代这种类型的哈希数组时简单地执行此操作:
从:
[{:name => "foo", :value => "bar"}, {:name => "foo2", :value => "bar2"}]
为:
{"foo" => "bar", "foo2" => "bar2"}
感谢。
答案 0 :(得分:9)
arr = [ {:name=>"foo", :value=>"bar"}, {:name=>"foo2", :value=>"bar2"}]
result = {}
arr.each{|x| result[x[:name]] = x[:value]}
# result is now {"foo2"=>"bar2", "foo"=>"bar"}
答案 1 :(得分:3)
Vanson Samuel代码的修改版本符合预期。 这是一个单行,但相当长。
arr = [{:name=>"foo", :value=>"bar"}, {:name=>"foo2", :value=>"bar2"}]
arr.inject({}){|r,item| r.merge({item['name'] => item['value']})}
# result {"foo" => "bar", "foo2" => "bar2"}
但是,我不会说它比Gishu的版本更漂亮。
答案 2 :(得分:1)
作为一般经验法则,如果你有一个{:name =>形式的哈希值“foo”,:value => “bar”},使用[“foo”,“bar”]的元组通常会更好。
arr = [["foo", "bar"], ["foo2", "bar2"]]
arr.inject({}) { |accu, (key, value)| accu[key] = value; accu }
答案 3 :(得分:1)
我知道这是旧的,但实现这一点的最好方法是将哈希数组映射到元组数组,然后使用Hash []从中构建哈希,如下所示:
arr = [{:name => "foo", :value => "bar"}, {:name => "foo2", :value => "bar2"}]
Hash[ array.map { |item| [ item[:name], item[:value] ] } ]
# => {"foo"=>"bar", "foo2"=>"bar2"}
答案 4 :(得分:0)
有点晚了但是:
count_lte_70_1 = read_pixel.count((138, 18, 20, 255))