Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将数字放入矩阵数组_Arrays_Ruby - Fatal编程技术网

Arrays 将数字放入矩阵数组

Arrays 将数字放入矩阵数组,arrays,ruby,Arrays,Ruby,我做到了: 正如医生所说: 也可以通过显式调用::new with zero来创建数组, 一个(数组的初始大小)或两个参数(初始大小 和默认对象) 注意,第二个参数使用对同一对象的引用填充数组 因此,每当您将2推送到第一个数组时,因为它是同一个对象,所以它会对三个空数组执行此操作 如果只想推送到“main”数组中的第一个数组,可以使用块并在其中指定默认对象: def transpose(matrix) debugger result = Array.new(matrix[0].lengt

我做到了:

正如医生所说:

也可以通过显式调用::new with zero来创建数组, 一个(数组的初始大小)或两个参数(初始大小 和默认对象)

注意,第二个参数使用对同一对象的引用填充数组

因此,每当您将2推送到第一个数组时,因为它是同一个对象,所以它会对三个空数组执行此操作

如果只想推送到“main”数组中的第一个数组,可以使用块并在其中指定默认对象:

def transpose(matrix)
  debugger
  result = Array.new(matrix[0].length, []) #HARD - PASS BY REFERENCE ISSUE
  matrix.each do |row|
    row.each_with_index do |el, col_idx|
      result[col_idx] << el
    end
  end
  result
end
matrix=[[1,2,3],[4,5,6],[7,8,9]]
结果=数组.new(矩阵[0]。长度){[]}
执行此操作时的结果[0]

matrix = [[1,2,3],[4,5,6],[7,8,9]]
result = Array.new(matrix[0].length) { [] }
result[0] << 2
p result # [[2], [], []]

您基本上创建了一个包含3个点的数组,但所有3个点都引用同一个数组对象
[]
。这就是为什么,一旦你做了
result[0],我建议阅读Ruby中的可变性概念;这是一个经典的例子。在
Array::new
的文档中(或多或少地)使用您的确切例子明确解释了这一点,并且已经被问了几十次了。不,它与通过引用传递没有任何关系;Ruby总是严格按值传递(虽然传递的值是引用,但这是完全不同的)。
matrix = [[1,2,3],[4,5,6],[7,8,9]]
result = Array.new(matrix[0].length) { [] }
result[0] << 2
p result # [[2], [], []]
result = Array.new(matrix[0].length, [])
p result.map &:object_id
#=>  [70264755245320, 70264755245320, 70264755245320] # shows the same reference
result = Array.new(matrix[0].length) { [] }
result = Array.new(matrix[0].length) { puts 'here'; [] }
here
here
here
 => [[], [], []]
 result.map &:object_id
# => [70264754918500, 70264754918440, 70264754918340]