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