2012-11-07 24 views
0

我有以下哈希簡單的方法來找到所有的哈希值與特定值

h = [{:foo=>:bar}, {:qqq=>:ppp}, {:xxx=>123}] 

我想找到所有哈希其中Symbol中值的陣列。

目前我使用這種方法,但我並不喜歡它,因爲我必須爲每個哈希創建數組並提取第一個元素(hash.values[0])。

h.select { |hash| hash.values[0].is_a?(Symbol) } 
# => [{:foo=>:bar}, {:qqq=>:ppp}] 

也許有這樣做更優雅的東西?

+4

感覺怪怪的你只依靠哈希有一個鍵/值對。爲什麼不創建專用對象? – apneadiving

+0

你正在尋找什麼輸出? –

+1

我同意apneadiving。它並沒有真正利用Hash能做什麼,它們也可能是兩個元素的數組。如果您有能力按照@Konstantin的建議改變輸入內容,那將更有意義。 –

回答

2

如果你不想使用數組,使用哈希)

h = { :foo=>:bar, :qqq=>:ppp, :xxx=>123 } 
h.select { |k, v| v.is_a?(Symbol) } 
=> { :foo=>:bar, :qqq=>:ppp }