【问题标题】:Assigning values to a 2D array using "each" method使用“each”方法将值分配给二维数组
【发布时间】:2015-06-20 19:19:24
【问题描述】:

我正在尝试转置[[0, 1, 2], [3, 4, 5], [6, 7, 8]]。我得到[[2, 5, 8], [2, 5, 8], [2, 5, 8]]

我可以看到p transposed_arr 行发生了什么,但不明白为什么会发生这种情况。在每次迭代中,它都会更改每一行,而不是仅更改一行。

def my_transpose(arr)
  # number of rows
  m = arr.count

  #number of columns
  n = arr[0].count

  transposed_arr = Array.new(n, Array.new(m))

  # loop through the rows
  arr.each_with_index do |row, index1|

      # loop through the colons of one row
      row.each_with_index do |num, index2|

          # swap indexes to transpose the initial array
          transposed_arr[index2][index1] = num
          p transposed_arr
      end
  end
  transposed_arr
end

【问题讨论】:

  • 谢谢卡里,它有效...
  • 现在您的代码正在运行,请考虑将其发布到Code Review 以获得改进建议。如果您以前没有去过那里,我想您会对那里提供的建议印象深刻。那里发布的许多问题都是新手提出的,所以一点也不吓人。

标签: ruby arrays variable-assignment


【解决方案1】:

您只需要进行一点更改,您的方法就可以正常工作。替换:

transposed_arr = Array.new(n, Array.new(m))

与:

transposed_arr = Array.new(n) { Array.new(m) }

前者使所有itransposed_arr[i] 成为同一个对象(大小为m 的数组)。后者为每个i 创建一个大小为m 的单独数组

案例一:

transposed_arr = Array.new(2, Array.new(2))
transposed_arr[0].object_id
  #=> 70235487747860 
transposed_arr[1].object_id
  #=> 70235487747860

案例 2:

transposed_arr = Array.new(2) { Array.new(2) }
transposed_arr[0].object_id
  #=> 70235478805680 
transposed_arr[1].object_id
  #=> 70235478805660

随着更改,您的方法返回:

[[0, 1, 2],
 [3, 4, 5],
 [6, 7, 8]]

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多