如何将哈希数组转换为哈希值数组?

时间:2013-05-01 17:23:58

标签: ruby arrays

我有一系列哈希:

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]

如何将其转换为值数组:

["male", "male", "female"]

6 个答案:

答案 0 :(得分:4)

在这种情况下,

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten

应该有用。

从每个哈希中获取一个数组,然后展平嵌套数组。

答案 1 :(得分:4)

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values)

答案 2 :(得分:2)

arr = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
arr.map(&:values).flatten

编辑:按照@tadman的指示。谢谢!

答案 3 :(得分:2)

这种考虑其他可能键的通用方法:

list = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]

# Collect the 'sex' key of each hash item in the list.
sexes = list.collect { |e| e['sex'] }

答案 4 :(得分:1)

你可以“映射”数组中的元素,获取哈希值,它们“展平”结果数组。

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map{|h| h.values }
=> [["male"], ["male"], ["female"]]

[["male"], ["male"], ["female"]].flatten
=> ["male", "male", "female"]

在一行中,您可以:

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map{|h| h.values }.flatten

或:

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten

文档:

答案 5 :(得分:-2)

    arr = Array.new 
    my_hash.each do |el|
      #collect them here...
      arr.push(el["sex"]);
    end

希望有所帮助