从ruby中的数组散列中提取数据

时间:2014-02-23 08:44:46

标签: ruby-on-rails ruby arrays hash

我是ruby的新手,正在开展一个大型数据项目,我的问题很无聊。

我有一个哈希,其中包含按商店ID排序的销售数据:

hash = Hash.new(Array.new))
Sale.all.each {|sale| hash[sale.store_id].push( JSON.parse(sale.data)['items']) }

现在,我希望遍历每个store_id并获取每个item.promo_code = 24并说出每个store.id有多少项。

以下是每个密钥内部数组的数据结构:

hash => 1 : Array [[{DATA,DATA,DATA}{DATA,DATA,DATA}]]

如何在红宝石中完成?

非常感谢您提前

修改

我决定从不同角度解决这个问题

Sale.all.each {|sale| arr[sale.store_id] +=1 if (JSON.parse(sale.data)['items'].each{|item| item['buy_promotion_code']} == 24)  }

没有得到任何我得到arr[#] = 0所有时间的帮助:(

3 个答案:

答案 0 :(得分:1)

result_hash = {}

hash.each do |key, array|
  result_hash[key] = array.find_all({|item| item.promo_code = 24}).length
end

答案 1 :(得分:0)

result_hash = {}

hash.each do |key, array|
  result_hash[key] += 1 if array[0] == 24
  puts array
end

其中array [0]应该给出数组中每个项目的promo_code的值。

答案 2 :(得分:0)

我的朋友帮我这个。

他向我展示了简化所有混乱的计数功能

这是适合我的路线:

Sale.all.each {|sale| arr[sale.store_id] +=  (JSON.parse(sale.data)['items'].count {|item|  item['buy_promotion_code'] == "-1"}) }