如何遍历一组数字,进行一些加法并附加到数组?
Posted
技术标签:
【中文标题】如何遍历一组数字,进行一些加法并附加到数组?【英文标题】:How do I loop through a set of numbers, do some addition and append to an array? 【发布时间】:2011-12-13 01:46:50 【问题描述】:我的目标是创建一个数组,其中包含一组骰子上 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
【问题讨论】:
【参考方案1】:您正在循环内调用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】: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
并且一切都会解决。
【讨论】:
我是菜鸟。我还没到那里,但感谢您提供有关如何编写干净的 ruby 的见解! 缩进 4 个空格(或制表符?)也不是很红宝石风格;) @d11wtq,呵呵,没错,但我不能忍受两个空格缩进:嵌套的差异太微妙了。当我在处理已经有两个空格的项目时,我坚持使用两个空格,但我一直在抱怨。【参考方案3】:附带说明:请注意您将问题过度复杂化(因为您以命令式的方式思考,请查看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(:+)
【讨论】:
我一直在寻找一种在 Ruby 中进行列表推导的机制,但认为大多数机制看起来很糟糕。鉴于 Ruby 不支持更简单的列表推导式,这 几乎是最佳的。以上是关于如何遍历一组数字,进行一些加法并附加到数组?的主要内容,如果未能解决你的问题,请参考以下文章