生成的Matrix值未正确返回
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成的Matrix值未正确返回相关的知识,希望对你有一定的参考价值。
def test
ret = Array.new( @height, [] )
for y in 0..@height-1
for x in 0..@width-1
ret[y][x] = ( Random.rand * 10 ).to_i
end
print ret[y]
puts
end
ret
end
当我调用测试函数时,我得到一个大小宽度×高度的随机true / false矩阵,如预期的那样。然而,当我查看返回值时,我得到一个矩阵,其中每行都打印了最后一行的内容。
这是在我调用函数时打印的:
[8, 3, 7, 9, 6, 2, 2, 2, 1, 5]
[7, 3, 2, 3, 1, 6, 0, 7, 2, 7]
[0, 0, 9, 7, 9, 5, 3, 9, 5, 3]
[7, 7, 8, 1, 6, 3, 3, 7, 9, 9]
[4, 9, 2, 7, 9, 0, 4, 2, 0, 2]
[0, 4, 0, 5, 7, 1, 5, 0, 2, 8]
[0, 5, 6, 9, 1, 8, 8, 3, 6, 2]
[6, 9, 0, 2, 0, 8, 1, 1, 0, 5]
[6, 3, 4, 9, 3, 1, 2, 7, 3, 6]
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3]
这就是我想要的。
当我将函数的返回值赋给变量并查看它时,我得到了这个:
[[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3],
[5, 6, 6, 4, 4, 0, 0, 0, 4, 3]]
这是最后一次印刷的线条。
我现在的问题是:如何正确地从函数返回矩阵以在我的代码中的其他地方使用?
我有用ret = []
编写的函数,在for循环中我使用ret.push([])
然后看起来似乎有些原因,但看起来非常难看。我也试过不同的数据类型,但没有一种会导致差异
预期:返回值应与打印的值相同
实际:返回值是重复多次的最后一行(见上文)
答案
发生了什么事在这里:
Array.new( @height, [] )
这将创建一个包含相同数组的@height
副本的数组。因此,当您写入一行时,每个循环,您实际上都在写入矩阵中的每一行。
尝试在块内创建嵌套数组,这将确保每行具有不同的行。
Array.new(@height) { Array.new(@width) }
这将为外部数组的每一行调用块,确保不同的行具有不同的数组。
以上是关于生成的Matrix值未正确返回的主要内容,如果未能解决你的问题,请参考以下文章