我有一个哈希数组:
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
如何将其转换为值数组:
["male", "male", "female"]
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values)
在这种情况下,
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten
应该管用。
它从每个哈希中获取一个数组,然后展平嵌套数组。
一种通用的方法,将考虑其他可能的键:
list = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
# Collect the 'sex' key of each hash item in the list.
sexes = list.collect { |e| e['sex'] }
arr = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
arr.map(&:values).flatten
编辑:按照@tadman 的指示。谢谢!
您可以“映射”数组内的元素,获取哈希值,然后将结果数组“展平”。
[{"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
文件:
arr = Array.new
my_hash.each do |el|
#collect them here...
arr.push(el["sex"]);
end
希望能帮助到你