我有一系列哈希:
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
如何将其转换为值数组:
["male", "male", "female"]
答案 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
希望有所帮助