Arrays 如何知道ruby中数组中有几种组合的可能性
我有一个数组Arrays 如何知道ruby中数组中有几种组合的可能性,arrays,ruby,random,sum,Arrays,Ruby,Random,Sum,我有一个数组@ari=[1,3,4,2,7,8,9],我想知道有多少组合的可能性可以加上等于9 我应该有四种可能性,可以加上等于9的[1,8]、[2,3,4]、[9]、[2,7],但在我的代码中,我只知道两种可能性,并且可以在这个问题中显示一种可能性 def sums (num, target) random1 = num.sample random2 = num.sample if random1+random2 == target ary1 = [random1, random2
@ari=[1,3,4,2,7,8,9]
,我想知道有多少组合的可能性可以加上等于9
我应该有四种可能性,可以加上等于9的[1,8]
、[2,3,4]
、[9]
、[2,7]
,但在我的代码中,我只知道两种可能性,并且可以在这个问题中显示一种可能性
def sums (num, target)
random1 = num.sample
random2 = num.sample
if random1+random2 == target
ary1 = [random1, random2]
end
end
您可以使用数组#组合
:
(1..ary.size).inject(0) do |a, e|
a + ary.combination(e).count { |e| e.sum == 9 }
end
#=> 4
如果您的ruby版本低于2.4,您可以使用inject(:+)
而不是sum
。您可以使用Array#combination
:
(1..ary.size).inject(0) do |a, e|
a + ary.combination(e).count { |e| e.sum == 9 }
end
#=> 4
如果您的ruby版本低于2.4,您可以使用
inject(:+)
而不是sum
。如果您对组合本身而不仅仅是计数感兴趣:
(1..a.size).flat|map{n|a.composition(n).to|a}
如果{c | c.inject(:+)==9}
#=> [[9], [1, 8], [2, 7], [3, 4, 2]]
如果您对组合本身而不仅仅是计数感兴趣:
(1..a.size).flat|map{n|a.composition(n).to|a}
如果{c | c.inject(:+)==9}
#=> [[9], [1, 8], [2, 7], [3, 4, 2]]
您有没有尝试过什么?请表明您已尝试解决该问题。公平地说,“复制”在ruby中不是答案。。。但是你不能用一种特定的语言提出如此宽泛的问题,而不首先展示你试图解决的问题。@MarkThomas我编辑了我的问题,它是我的try@TomLord我很抱歉犯了这个错误,我有关于这个问题的代码,但我认为没有真正击中问题的核心,所以我不知道我应该把它放在我的问题上。你有没有试过什么?请表明您已尝试解决该问题。公平地说,“复制”在ruby中不是答案。。。但是你不能用一种特定的语言提出如此宽泛的问题,而不首先展示你试图解决的问题。@MarkThomas我编辑了我的问题,它是我的try@TomLord我很抱歉犯了这个错误,我有关于这个问题的代码,但我认为没有真正击中问题的核心,所以我不知道我应该把它放在我的问题上。@ndn:有时候会发生。如果您在问题关闭之前开始编写答案,您的浏览器可能不会在答案完成时注意到问题已关闭。不过,不要问我为什么服务器会接受这个答案。请注意,Array#sum
仅包含在ActiveSupport
(例如Rails项目)中,或者包含在ruby版本2.4+
中。在ruby的较低版本中,如果没有需要'active\u support/core\u ext/enumerable.rb'
或需要'active\u support/all'
,则需要使用.inject(:+)
。为什么要分配给a
?它是一个局部变量(更准确地说,是一个参数绑定,但它们的行为类似于局部变量),因此在块的末尾(即赋值之后)无论如何都超出了范围。@JörgWMittag,我没有注意到这一点,当然,赋值在这里是无用的。@ndn:有时会发生这种情况。如果您在问题关闭之前开始编写答案,您的浏览器可能不会在答案完成时注意到问题已关闭。不过,不要问我为什么服务器会接受这个答案。请注意,Array#sum
仅包含在ActiveSupport
(例如Rails项目)中,或者包含在ruby版本2.4+
中。在ruby的较低版本中,如果没有需要'active\u support/core\u ext/enumerable.rb'
或需要'active\u support/all'
,则需要使用.inject(:+)
。为什么要分配给a
?它是一个局部变量(更准确地说,是一个参数绑定,但它们的行为类似于局部变量),因此在块的末尾(即赋值之后)无论如何都超出了范围。@JörgWMittag,我错过了这一点,当然,赋值在这里是无用的。创建一个大的中间数组可能不适合较大的数据集。针对给定问题的非常干净的解决方案,尽管创建大型中间阵列可能不适合较大的数据集。对于给定的问题,非常干净的解决方案