2013-02-07 115 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