Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何知道ruby中数组中有几种组合的可能性_Arrays_Ruby_Random_Sum - Fatal编程技术网

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,我错过了这一点,当然,赋值在这里是无用的。创建一个大的中间数组可能不适合较大的数据集。针对给定问题的非常干净的解决方案,尽管创建大型中间阵列可能不适合较大的数据集。对于给定的问题,非常干净的解决方案