如何循环访问一组数字,做一些加法并追加到数组中?

问题描述:

我的目标是在一组骰子上创建一个包含2个数字的每个组合的总和的数组。我正在创建循环的开始,在通过die1[1] + die2[0..5]等之前,将die1[0]添加到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 

要调用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 
+0

当然不过。谢谢! –

+0

不客气。 – Mischa

一个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是相同在这种情况下,这样你就可以取代die2die1,它会所有工作了。

+0

我是一个noob。我还没到,但是要感谢关于如何编写干净的红宝石的见解! –

+0

用4个空格缩进(或制表符)并不是非常ruby-esque;) – d11wtq

+0

@ d11wtq,呵呵,这是正确的,但我无法忍受双空间缩进:嵌套的差异太微妙。当我在处理已经有两个空间的项目时,我坚持两个空格,但我一直抱怨。 – sarnold

作为一个方面说明:请注意,您是在过度复杂化的问题(因为你认为在命令条件下,看看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(:+) } 
+0

我一直在寻找一种机制来做Ruby中的列表推导,但是认为大部分机制看起来非常粗糙。由于Ruby不支持更简单的列表解析,因此_This_几乎是最佳的。 – sarnold