首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在多维数组中聚合某些数组?

如何在多维数组中聚合某些数组?
EN

Stack Overflow用户
提问于 2019-07-12 02:22:46
回答 2查看 73关注 0票数 1

我有一个嵌套的数组,需要按照下面所示的方式聚合除了最后一个元素之外相等的内部数组。

代码语言:javascript
复制
_array = [["Nokia","Review","3"], ["Nokia","Review","2"],
          ["Samsung","Review","4"], ["Apple","Review","4"],
          ["Apple","Review","3"]]

所需输出:

代码语言:javascript
复制
[["Nokia","Review","5"], ["Samsung","Review","4"], ["Apple","Review","7"]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-12 02:37:06

一行代码,只是为了好玩:

代码语言:javascript
复制
_array.group_by{ |e| e.first(2) }
      .transform_values { |v| v.sum { |e| e.last.to_i } }
      .map { |k, v| k << v.to_s }

#=> [["Nokia", "Review", 5], ["Samsung", "Review", 4], ["Apple", "Review", 7]]

一些帮助理解的步骤

代码语言:javascript
复制
_array.group_by{ |e| e.first(2) }
#=> {["Nokia", "Review"]=>[["Nokia", "Review", "3"],["Nokia", "Review", "2"]],
#    ["Samsung", "Review"]=>[["Samsung", "Review", "4"]],
#    ["Apple", "Review"]=>[["Apple", "Review", "4"], ["Apple", "Review", "3"]]}

_array.group_by{ |e| e.first(2) }.transform_values { |v| v.sum { |e| e.last.to_i } }
#=> {["Nokia", "Review"]=>5, ["Samsung", "Review"]=>4, ["Apple", "Review"]=>7}

然后是map

票数 3
EN

Stack Overflow用户

发布于 2019-07-12 02:29:50

这是一个非常奇怪的形式,因为数字是字符串,但您可以通过一些转换进行累积:

代码语言:javascript
复制
array = [["Nokia","Review","3"], ["Nokia","Review","2"], ["Samsung","Review","4"], ["Apple","Review","4"], ["Apple","Review","3"]]

# Define a tabulator Hash defaulting to count of 0
array.each_with_object(Hash.new(0)) do |a,h|
  # Use the first two elements of the array as the key
  h[a[0,2]] += a[2].to_i
end.map do |k, v|
  # Convert back to string value, combining key and count
  k + [ v.to_s ]
end

# => [["Nokia", "Review", "5"], ["Samsung", "Review", "4"], ["Apple", "Review", "7"]]

正如您所看到的,如果数据是不同的形式,或者即使数字实际上是整数,这将会容易得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56995257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档