2013-02-07 69 views
2

我想在条件满足时将哈希键值提取到数组。例如,散列h I类要提取其中的值是“真”的按键:红宝石哈希键阵列条件的散列值

h = { :a => true, :b => false, :c =>true } 

我想出这个:

h.map {|k,v| k if v==true} - [nil] 

任何的替代品?

+0

地图和选择的方法是别名,所以你可以使用其中之一。 – sbagdat

+2

@sbagdat,准确地说,'map'和*'collect' *是别名,而不是'select'。 ['select'](http://apidock.com/ruby/Hash/select)做不同的工作,在Hash的情况下返回不同的类型:它返回Hash,而map/collect返回Array。 – NIA

+0

对不起,我的错误。 – sbagdat

回答

10
h.select { |_, v| v }.keys 

会做同样的事情,但以更可读的方式。

+0

很好,谢谢。但是,要返回数组,您需要使用to_a。 – DavB

+1

'keys'返回'Array'。还会有什么回报? –

+0

@Joerg。是的,我的错误。谢谢。 – DavB

0

你也可以做

s = {} 
h.each do |k,v| 
    s[k] = v if v==true 
end