Ruby:无法更改二维数组中的值

时间:2015-02-16 21:02:53

标签: ruby arrays

决定制作一种创建二维数组的方法。阵列看起来很好,但是当我试图更改值时,我在所有子阵列中更改了该值,所以它看起来像这样:

a[0][0] = 0

[[0," "," "],[0," ",&# 34; "],[0," "," "]]

如何让它正常工作?

以下是创建数组的方法:

def create_array(size)
array = []
line = []
size.times { line << "*" }
size.times { array << line }
array
end

1 个答案:

答案 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, "*")调用。