gpt4 book ai didi

ruby - Ruby 中数组正负值的所有组合

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

我想知道如何根据输入数组中的值在 Ruby 中获取包含正值和负值的所有组合的数组。顺序无关紧要,但必须适应所有大小的输入数组。它必须灵活,以便输入中可以包含负数,即使我没有在下面的示例中包含它们。

例如:

输入:

a = [1,2,3,4]

输出:

b = [[1,2,3,4],[1,2,3,-4],[1,2,-3,-4],[-1,2,-3,-4]...[1,-2,3,-4],[1,-2,-3,-4],[-1,-2,-3,-4],[-1,-2,-3,4],[-1,-2,3,4],[-1,2,3,4]]

非常感谢您的帮助!

最佳答案

您会注意到,当您遍历正数和负数时,您应用负数的模式与您在二进制计数时用于递增位的模式相同。这是因为数组中的每个索引可以有两个值之一(正或负),就像二进制数中的每个位可以有两个值之一(0 或 1)一样。因此,简单的解决方案是将 0 和 1 映射到正值和负值。然后我们可以进行正常的 Ruby 迭代,并检查元素对应索引处的位。

a = [1,2,3,4]  # => [1, 2, 3, 4]

signed = [a, a.map(&:-@)] # => [[1, 2, 3, 4], [-1, -2, -3, -4]]
(0...2**a.size).each do |n| # => 0...16
p Array.new(a.size) { |i| signed[n[i]][i] } # => [1, 2, 3, 4], [-1, 2, 3, 4], [1, -2, 3, 4], [-1, -2, 3, 4], [1, 2, -3, 4], [-1, 2, -3, 4], [1, -2, -3, 4], [-1, -2, -3, 4], [1, 2, 3, -4], [-1, 2, 3, -4], [1, -2, 3, -4], [-1, -2, 3, -4], [1, 2, -3, -4], [-1, 2, -3, -4], [1, -2, -3, -4], [-1, -2, -3, -4]
end # => 0...16

# >> [1, 2, 3, 4]
# >> [-1, 2, 3, 4]
# >> [1, -2, 3, 4]
# >> [-1, -2, 3, 4]
# >> [1, 2, -3, 4]
# >> [-1, 2, -3, 4]
# >> [1, -2, -3, 4]
# >> [-1, -2, -3, 4]
# >> [1, 2, 3, -4]
# >> [-1, 2, 3, -4]
# >> [1, -2, 3, -4]
# >> [-1, -2, 3, -4]
# >> [1, 2, -3, -4]
# >> [-1, 2, -3, -4]
# >> [1, -2, -3, -4]
# >> [-1, -2, -3, -4]

关于ruby - Ruby 中数组正负值的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340545/

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