rei*_*lex 4 ruby arrays matrix
所有我想要做的是交换matrix[i][j]与matrix[j][i]使用while循环.为什么这不起作用?
def my_transpose(matrix)
new_matrix = []
i = 0
j = 0
while i < matrix.size
new_matrix[i] = []
while j < matrix.size
new_matrix[i] << matrix[j][i]
j += 1
end
i += 1
end
return new_matrix
end
Run Code Online (Sandbox Code Playgroud)
如果我用类似的东西运行它
[
[1,2,3],
[1,2,3],
[1,2,3]
]
Run Code Online (Sandbox Code Playgroud)
它只是回来了1,1,1.我如何让它返回1,1,1; 2,2,2; 3,3,3?
Yu *_*Hao 14
如果你的问题是如何用Ruby交换矩阵中的列和行,答案是使用内置的Array#transpose
a = [
[1,2,3],
[1,2,3],
[1,2,3]
]
#=> [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
a.transpose
#=> [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
Run Code Online (Sandbox Code Playgroud)
在循环j = 0 内移动i
def my_transpose(matrix)
new_matrix = []
i = 0
while i < matrix.size
new_matrix[i] = []
j = 0 # move this here
while j < matrix.size
new_matrix[i] << matrix[j][i]
j += 1
end
i += 1
end
return new_matrix
end
Run Code Online (Sandbox Code Playgroud)
如果j每次循环都没有重置为 0,那么除了第一次之外,i它永远不会进入循环:j
i = 0
j = 0
# Enter i loop
new_matrix[0] = []
# Enter j loop
new_matrix[0] << matrix[0][0]
j += 1 #=> 1
new_matrix[0] << matrix[1][0]
j += 1 #=> 2
new_matrix[0] << matrix[2][0]
j += 1 #=> 3
# Exit j loop
i += 1 #=> 1
new_matrix[1] = []
# Does not enter j loop as j = 3 > matrix.size
i += 1 #=> 2
new_matrix[2] = []
# Does not enter j loop as j = 3 > matrix.size
i += 1 #=> 3
# Exit i loop
Run Code Online (Sandbox Code Playgroud)