我正在尝试使用来自row
循环的块变量col
和for
,我收到no implicit conversion of Array into Integer
错误。
@arr.each do |row|
row.each do |col|
if (col == 1)
if (row != 0)
# figure out how to use row and col variables
# example @arr[row][col] = 1
end
end
end
end
end
任何帮助将不胜感激。我想我可以像其他语言一样使用它们和常规的for
循环。
答案 0 :(得分:1)
我认为你可以像其他语言一样使用它们 常规循环..
是的,你可以:
@arr = [
[10, 11, 12],
[20, 21, 22],
[30, 31, 32],
]
@arr.each do |row|
row.each do |col|
p row
puts col
puts '-' * 10
end
end
--output:--
[10, 11, 12]
10
----------
[10, 11, 12]
11
----------
[10, 11, 12]
12
----------
[20, 21, 22]
20
----------
[20, 21, 22]
21
----------
[20, 21, 22]
22
----------
[30, 31, 32]
30
----------
[30, 31, 32]
31
----------
[30, 31, 32]
32
----------
您可以这样做:
@arr = [
[10],
[20, 21],
[30, 31, 32],
]
@arr.each do |row|
row.size.times do |col_num|
row[col_num] = 0
end
end
p @arr
--output:--
[[0], [0, 0], [0, 0, 0]]
或者,如果您确实需要每个行和列索引:
@arr = [
[10],
[20, 21],
[30, 31, 32],
]
@arr.each_with_index do |row, row_num|
row.size.times do |col_num|
row[col_num] = row_num + col_num
end
end
p @arr
--output:--
[[0], [1, 2], [2, 3, 4]]
顺便说一句,缩进是红宝石中的2个空格 - 而不是4个。
答案 1 :(得分:0)
据我所知row
是一个数组(因为你遍历它),而不是整数,所以没有意义去做像@arr[row]
这样的事情。 [][[]]
会出现同样的错误。因此将数组与整数(row != 0
)进行比较是很奇怪的。
在ruby中使用迭代器each
时,块中抛出的变量是数组的元素,而不是元素的索引。如果要使用索引,可以使用each_with_index
。