2

我有一个哈希数组:

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

如何将其转换为值数组:

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

6 回答 6

4
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values)
于 2013-05-01T17:29:00.830 回答
4

在这种情况下,

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

应该管用。

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

于 2013-05-01T17:27:30.017 回答
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'] }
于 2013-05-01T17:35:09.583 回答
2
arr = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
arr.map(&:values).flatten

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

于 2013-05-01T17:27:13.797 回答
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

文件:

于 2013-05-01T17:40:18.853 回答
-2
    arr = Array.new 
    my_hash.each do |el|
      #collect them here...
      arr.push(el["sex"]);
    end

希望能帮助到你

于 2013-05-01T17:31:05.047 回答