我有以下格式的数据结构:
data_hash = [ { price: 1, count: 3 }, { price: 2, count: 3 }, { price: 3, count: 3 } ]
有没有一种有效的方法来获得 :price的值作为一个数组,如 [1,2,3]?
:price
[1,2,3]
首先,如果使用 Ruby < 1.9:
array = [ {:price => 1, :count => 3}, {:price => 2, :count => 3}, {:price => 3, :count => 3} ]
然后得到你需要的:
array.map{|x| x[:price]}
有一个封闭的问题,重定向这里询问关于处理 map一个符号派生一个关键。这可以通过使用 Enumable 作为中间人来完成:
map
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)