gpt4 book ai didi

Ruby - 将数组组合中的值推送到新数组

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:39 25 4
gpt4 key购买 nike

我正在尝试打印此数组 [1,2,3] 中所有组合的所有不同总和。我想首先将每个总和结果推送到一个新数组 b,然后使用 b.uniq 打印它们,以便不重复总和结果。但是,使用我的代码,3 会重复出现,我认为这是因为它被插入数组 b 的方式。

有更好的方法吗?

a = [1,2,3]
b = []

b.push a

b.push a.combination(2).collect {|a,b| (a+b)}

b.push a.combination(3).collect {|a,b,c| (a+b+c)}

puts b.uniq
p b #[[1, 2, 3], [3, 4, 5], [6]]

有人可以帮我解决这个问题吗?我还是 ruby 的新手。

最佳答案

因为可以使用 inject(:+) 对任意长度的 Array 求和,所以我们可以通过遍历 1 范围来创建更通用的解决方案。 .n,其中 nArray 的长度。

(1..(a.size)).flat_map do |n|
a.combination(n).map { |c| c.inject(&:+) }
end.uniq
#=> [1, 2, 3, 4, 5, 6]

通过使用flat_map,我们可以避免得到嵌套的Array结果,可以直接在其上调用uniq。确保唯一性的另一种选择是将结果传递给 Set。 ,Ruby 在内部保证其唯一性。

require "set"

sums = (1..(a.size)).flat_map do |n|
a.combination(n).map { |c| c.inject(&:+) }
end

Set.new(sums)
#=> #<Set: {1, 2, 3, 4, 5, 6}>

只要所有元素都是 Fixnum,这将适用于任何 Array

关于Ruby - 将数组组合中的值推送到新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com