如何遍历一组数字,进行一些加法并附加到数组?

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]

当然,die1die2 在这种情况下是相同的,因此您可以将 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 不支持更简单的列表推导式, 几乎是最佳的。

以上是关于如何遍历一组数字,进行一些加法并附加到数组?的主要内容,如果未能解决你的问题,请参考以下文章

遍历文件时,如何将每个文件名附加到列表中? [复制]

循环遍历数组并附加到objective-C中的字符串

Hive数组的字符串转换为int数组

遍历动态数量的 for 循环(Python)

如何使用 SQL 表作为源填充 BIML 中的数组

如何在 Userdefaults (SwiftUI) 中将新元素附加到数组