从散列数组中收集值

我有以下格式的数据结构:

data_hash = [
{ price: 1, count: 3 },
{ price: 2, count: 3 },
{ price: 3, count: 3 }
]

有没有一种有效的方法来获得 :price的值作为一个数组,如 [1,2,3]

67831 次浏览

首先,如果使用 Ruby < 1.9:

array = [
{:price => 1, :count => 3},
{:price => 2, :count => 3},
{:price => 3, :count => 3}
]

然后得到你需要的:

array.map{|x| x[:price]}

有一个封闭的问题,重定向这里询问关于处理 map一个符号派生一个关键。这可以通过使用 Enumable 作为中间人来完成:

array = [
{:price => 1, :count => 3},
{:price => 2, :count => 3},
{:price => 3, :count => 3}
]


array.each.with_object(:price).map(&:[])


#=> [1, 2, 3]

除了稍微有点冗长和难以理解之外,它也比较慢。


Benchmark.bm do |b|
b.report { 10000.times { array.map{|x| x[:price] } } }
b.report { 10000.times { array.each.with_object(:price).map(&:[]) } }
end


#       user     system      total        real
#   0.004816   0.000005   0.004821 (  0.004816)
#   0.015723   0.000606   0.016329 (  0.016334)