2012-11-07 25 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 }