Ruby:对每个子数组的第一个元素分组的元素求和的有效方法

用户名

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有效地删除Java中arraylist中每个数组的第一个元素

给定一个大的元组数组,如何对每个元组的第一个元素进行分组,以便在没有 Pandas 数据帧的情况下对每个元组的最后一个元素求和?

是每个子列表的第一个元素?

列表中每个元组的第一个元素与字母字符之间的有效映射

在 Scala 中将 double 数组的每个元素除以一个常量的有效方法

为每个子列表的第一个元素分配值的更简单方法?

如何通过python中的第一个字符将元素有效地分组在一个巨大的列表中

如何按数组的第一个元素分组?

摆脱表头第一个元素的右边界的最有效方法是什么?

从大向量中删除第一个元素的最有效方法是什么?

Kotlin:在某些对象的某些列表中查找最小元素的第一个索引的最有效方法

量角器:过滤直到找到第一个有效元素

选择除第一个子元素之后的每个元素

如何提取每个子列表中每个元组的第一个元素?

识别具有相同第一个元素的数组并根据索引对其他元素求和

放大没有第一个元素的数组

根据数组的第一个元素对数组进行分组,而无需在Ruby中进行重复

数组第一个元素

将每个子列表的第一个元素转换为float

删除嵌套列表的每个子列表的第一个元素

选择不是其父级的第一个子级的每个<p>元素

计算 XSLT 中每个父级的不同第一个子值元素

使用jQuery的滑块,第一个有效,但第二个无效。需要动态元素

Ruby:从数组中删除第一个元素的最简单方法是什么?

使用numpy测试一个数组中的每个元素是否存在于另一个数组中的最有效方法

在flexbox中的每个包装之后,有什么方法可以访问第一个元素?

在Python中将列表的每个元素与另一个列表的每个元素相乘/相加/分隔的有效方法

有效地求和与另一个数组匹配的索引对应的numpy数组的元素

从元组数组中删除在每个元素的第一个索引位置具有相同值的元素