我有一个json结构:
[["item1", 1, 0], ["item1", 1, 0], ["item1", 1, 0], ["item2", 1, 0], ["item2", 1, 0],["item3", 1, 0],["item4", 1, 0],["item5", 1, 0]..]]
现在,我通过循环手动总结它们,以获取以下信息
[["item1", 3, 0], ["item2", 2, 0], ["item4", 1, 0], ["item5", 1, 0]]
还有另一种方法吗?我查看了Ruby中的数组模块,但不确定是否存在另一种方法来执行此操作...
编辑:这就是我在做什么:在这里我只总结第二项
@object = []
@stat = Hash.new
@data.each do |d|
if @object.include?(d[0])
@stat [d[0]] += d[2]
else
@object << d[0]
@stat[ d[0] ] = d[2]
end
end
编辑2:
我给一个衬套解决方案计时,并将其与我自己的解决方案进行比较
单线:0.005地雷:0.007
这是我最后使用的结果:
data.inject(Hash.new(0)) { |stat, item|
if item[0] =~ /[a-z][a-z][0-9][0-9][a-z]/ # extra stuff that I needed
item[0] = item[0][0..8]
stat[item[0]] += item[2]
end
stat
}
谢谢大家,我学到了很多东西。
单线生成数组(如示例中所示):
result = array.inject(Hash.new(0)){|h,item|h[item.first]+=item[2];h}.to_a
如果您希望结果以散列而不是数组的形式出现,请不要使用 .to_a
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句