Ruby on rails 不同大小数组的总和
我有一个数组,它的元素是不同大小的数组,比如:Ruby on rails 不同大小数组的总和,ruby-on-rails,arrays,ruby,Ruby On Rails,Arrays,Ruby,我有一个数组,它的元素是不同大小的数组,比如: [[45, 96, 0.0, 96, 96, 96, 0.0], [04, 55, 06, 55, 04, 04, 02, 55]] 我想求两个数组的和,即 [49, 151, ...] 您可以使用以下内容: a.flat_map{|x| x.in_groups_of(a.max_by(&:size).size, 0)}.transpose.map(&:sum) 或者这个: a.max_by(&:size).map.w
[[45, 96, 0.0, 96, 96, 96, 0.0], [04, 55, 06, 55, 04, 04, 02, 55]]
我想求两个数组的和,即
[49, 151, ...]
您可以使用以下内容:
a.flat_map{|x| x.in_groups_of(a.max_by(&:size).size, 0)}.transpose.map(&:sum)
或者这个:
a.max_by(&:size).map.with_index{|_, i| a.sum{|x| x[i]||0}}
不是很漂亮,但很管用:
>> a = [[45, 96, 0.0, 96, 96, 96, 0.0], [04, 55, 06, 55, 04, 04, 02, 55]]
=> [[45, 96, 0.0, 96, 96, 96, 0.0], [4, 55, 6, 55, 4, 4, 2, 55]]
>> sorted_a = a.sort_by(&:size).reverse
=> [[4, 55, 6, 55, 4, 4, 2, 55], [45, 96, 0.0, 96, 96, 96, 0.0]]
>> zipped_a = sorted_a.first.zip(sorted_a.last)
=> [[4, 45], [55, 96], [6, 0.0], [55, 96], [4, 96], [4, 96], [2, 0.0], [55, nil]]
>> zipped_a.map{ |arr| arr.map{ |v| v || 0 } }.map(&:sum)
=> [49, 151, 6.0, 151, 100, 100, 2.0, 55]
首先,您必须从最长的数组开始排序,以便
zip
正常工作。压缩将在较短数组的冗余值中创建nil
值。因此,下一步是将这些nil
s替换为零(使用嵌套的map
),最后您可以sum
值。您也可以尝试这种方法
k =[]
for i in 0..ar.max_by(&:size).length-1 do
k << ar.map { |x| [x[i]] }
end
k.map(&:flatten).map{|a| a.compact.sum}
=> [49, 151, 6.0, 151, 100, 100, 2.0, 55]
k=[]
对于0..ar.max_by(&:size)中的i.长度-1 do
k[49151,6.0151100100,2.0,55]
请注意,nil.to#i=>0
()
另一个例子:
a = [[1], [2,3,4], [5,6]]
Array.new(a.max_by(&:size).size) { |i| a.reduce(0) { |t,e| t+e[i].to_i } }
#=> [8,9,4]
OP不需要两个数组中所有值的总和,而是两个数组的“运行”总和。您尝试过吗?虽然它好得多,但它忽略了求和中的最后一个值(因为第一个数组较短)。这是可行的,尽管我个人对它的理解不如我的答案。我删除了否决票。我喜欢第二张!可以你已经试着自己解决这个问题了吗?如果是的话,你到底是在哪里被卡住的?一般来说,人们对“请为我编写此代码”请求(看起来像这样)的响应不太好,但对“我尝试了此方法,现在我卡住了/困惑了,请帮助”请求的响应很好;-)@吸烟者:是的,现在我意识到了这一点。我不知道为什么人们会投票反对一个问题?
a = [[1], [2,3,4], [5,6]]
Array.new(a.max_by(&:size).size) { |i| a.reduce(0) { |t,e| t+e[i].to_i } }
#=> [8,9,4]