我有散列的数组:如何将散列数组转换为散列值数组?
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
我怎样才能将其转换为数值数组:
["male", "male", "female"]
我有散列的数组:如何将散列数组转换为散列值数组?
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
我怎样才能将其转换为数值数组:
["male", "male", "female"]
的通用方法这一点,会考虑到其他可能的密钥:
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。谢谢!
有没有必要就地扁平化的一个中间值。 “扁平化”将完成这项工作。 – tadman 2013-05-01 17:33:22
@tadman右键。 :)我只是考虑它,因为AdamNYC希望将它们保留在同一个阵列中。 – kiddorails 2013-05-01 17:39:09
'flatten!'调用只会影响'map'操作的结果,并不会修改'arr'。 – tadman 2013-05-01 17:43:35
在这种情况下,
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten
应该工作。
它从每个散列获取一个数组,然后将嵌套数组展平。
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values)
你可以在“地图”内部数组中的元素,取散列值,它们“平坦化”结果数组。
[{"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
文档:
我喜欢这种方法,以防万一有更多的键比所需的。 +1 – squiguy 2013-05-01 17:36:49