如何循环一组数字,做一些加法并附加到数组?

时间:2011-10-22 07:46:33

标签: ruby arrays loops while-loop append

我的目标是创建一个数组,其中包含一组骰子上每个2个数字组合的总和。我正在创建一个循环的开头,在通过die1[0]之前将die2[0..5]添加到die1[1] + die2[0..5],依此类推。

我在下面有这个代码而且我做错了。我希望能够在数组中调用特定的数字,例如dieSums[4],并获得一个数字。知道我在这里做错了吗?

die1 = [1,2,3,4,5,6] 
die2 = [1,2,3,4,5,6]

dieSums = []

count = 0
while count <= 5 do   
  dieSums << die1[0] + die2[count]   
  count += 1   
  puts dieSums[5]    
end

3 个答案:

答案 0 :(得分:4)

正如你所写的那样,while循环不是非常Rubyonic。 (Rubinic?)迭代数组元素的更惯用的方法:

#!/usr/bin/ruby

die1 = [1,2,3,4,5,6]
die2 = [1,2,3,4,5,6]

dieSums = []

die1.each do |d1|
    die2.each do |d2|
        dieSums << d1 + d2
    end
end
puts dieSums[5]

当然,die1die2在这种情况下是相同的,因此您可以将die2替换为die1,这样就可以解决问题。

答案 1 :(得分:3)

您正在循环中调用puts dieSums[5]dieSums[5]直到最后一次迭代才会存在。如果你在循环之外调用它,它将起作用:

die1 = [1,2,3,4,5,6] 
die2 = [1,2,3,4,5,6]

dieSums = []

count = 0
while count <= 5 do   
  dieSums << die1[0] + die2[count]   
  count += 1
end

puts dieSums[5] #=> 7

答案 2 :(得分:2)

作为旁注:请注意,您的问题过于复杂(因为您以命令性的方式思考,请查看Functional programming)。两个骰子的所有可能值的总和:

>> die = [1,2,3,4,5,6]
>> die.product(die).map { |v1, v2| v1 + v2 }
=> [2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 11, 7, 8, 9, 10, 11, 12]
  • 如果您不想重复值,请在结尾处调用uniq
  • 如果您不关心订单,请使用repeated_combination(2)代替product
  • 请注意die.product(die) = die.repeated_permutation(2)

找到N骰子的所有总和几乎一样简单:

>> die.repeated_permutation(5).map { |values| values.inject(:+) }