2013-05-01 157 views

回答

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'] } 
+0

我喜欢这种方法,以防万一有更多的键比所需的。 +1 – squiguy 2013-05-01 17:36:49

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

编辑:作为导演@tadman。谢谢!

+2

有没有必要就地扁平化的一个中间值。 “扁平化”将完成这项工作。 – tadman 2013-05-01 17:33:22

+0

@tadman右键。 :)我只是考虑它,因为AdamNYC希望将它们保留在同一个阵列中。 – kiddorails 2013-05-01 17:39:09

+0

'flatten!'调用只会影响'map'操作的结果,并不会修改'arr'。 – tadman 2013-05-01 17:43:35

4

在这种情况下,

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

应该工作。

它从每个散列获取一个数组,然后将嵌套数组展平。

4
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values) 
-2
arr = Array.new 
    my_hash.each do |el| 
     #collect them here... 
     arr.push(el["sex"]); 
    end 

希望它可以帮助

+1

这不会转换,它只是打印。你已经忽略了这个关键部分。不是一个真正的答案,是吗? – tadman 2013-05-01 17:33:54

+1

我确实写了他要收集它们的地方......所以这里更正了 谢谢 – lrl 2013-05-01 17:38:05

+1

还有其他几个答案提供了这个功能。这个非答案应该被删除。 – tadman 2013-05-01 17:44:42

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 

文档:

+3

-1用于在发布相同解决方案的答案后12分钟提出答案。 – sawa 2013-05-01 17:41:29

+1

它更彻底,但是这个确切的解决方案已经发布了三次。与晚会时尚不同,这只是多余的。 – tadman 2013-05-01 17:44:13

+0

对不起,我不知道这是一场比赛。我是否应该快速写照明以便下次获得积分?我试图给出一个很好的答案,包括搜索别的东西。对不起,如果我不够快。 – 2013-05-01 17:49:15