决定制作一种创建二维数组的方法。阵列看起来很好,但是当我试图更改值时,我在所有子阵列中更改了该值,所以它看起来像这样:
a[0][0] = 0
[[0," "," "],[0," ",&# 34; "],[0," "," "]]
如何让它正常工作?
以下是创建数组的方法:
def create_array(size)
array = []
line = []
size.times { line << "*" }
size.times { array << line }
array
end
答案 0 :(得分:1)
此代码在line
的每一行中放置相同的array
:
def create_array(size)
array = [] # Create an Array object, "array"
line = [] # Create an Array object, "line"
size.times { line << "*" }
# The following line puts the SAME Array object, "line", into
# array "size" times
#
size.times { array << line }
array
end
你需要每次都换一个新的。我假设size
你的意思是方阵:
def create_array(size)
Array.new(size) { Array.new(size, "*") }
end
此处,Array.new(n, elt)
创建一个长度为n
且填充了元素elt
的新Array对象。见Ruby Array "new" method。请注意,尝试执行此类操作的问题与原始问题类似:
Array.new(size, Array.new(size, "*"))
在这种情况下,Array.new(size, "*")
发生一次,并作为第二个参数传递给“外部”Array.new(size, ...)
,因此这里的每一行也是相同的Array对象。如上所述将块传递给Array.new(...)
会为每一行生成单独的Array.new(size, "*")
调用。