如何循环访问一组数字,做一些加法并追加到数组中?
问题描述:
我的目标是在一组骰子上创建一个包含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
答
一个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]
当然,die1
和die2
是相同在这种情况下,这样你就可以取代die2
与die1
,它会所有工作了。
答
作为一个方面说明:请注意,您是在过度复杂化的问题(因为你认为在命令条件下,看看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
当然不过。谢谢! –
不客气。 – Mischa