【发布时间】:2015-08-14 13:07:55
【问题描述】:
我正在转置一个包含 M 行和 N 列的二维数组,其中 M 是外部数组的长度,N 是嵌套数组的长度(我在解决方案中考虑了不同的长度):
a = [[1, 2], [3, 4, 5], [6], [7, 8, 9], [10, 11, 12]]
我使用each 的工作解决方案是:
(0..(@columns-1)).each do |col|
(0..(@rows-1)).each do |row|
print @ar[row][col]
end
print "\n"
end
结果是:
136710
24-811
-5-912
作为验证的结果,我用'-' 填充了空白点,以使内部数组的长度相同。
我尝试使用以下while 循环解决问题:
while @columns > 0
while @rows > 0
p @ar[(@rows - 1)][(@columns - 1)]
@rows = @rows - 1
end
@columns = @columns - 1
end
结果是:
12
9
"-"
5
"-"
为什么each 循环有效而while 循环无效?
【问题讨论】:
-
在
while版本中,您不会在每次外循环迭代时重置@rows。此外,您稍后可能会使用这些变量,但它们的值现在已损坏。 -
@TheF
@rows和@columns似乎不是数组。 -
@SergioTulentsev 是真的。您的评论完全正确。
-
M和N在哪里使用?@columns和@rows是什么? -
@SoSimple:如果它们被用在其他地方,你不应该在愚蠢的循环中改变它们的值:)