You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用内置transpose方法实现Ruby二维数组转置?

手动实现Ruby二维数组转置(不用内置transpose方法)

哈哈,时隔6年还能收到讨论这个问题的消息太惊喜了!我当初刚摸Ruby的时候也在这儿卡过一会儿,其实核心逻辑没那么复杂,就是把原数组的「行」和「列」索引互换就行~

实现思路

  • 首先明确转置的本质:原数组第j行第i列的元素,会变成转置后数组第i行第j列的元素
  • 先处理空数组的边界情况,避免后续循环报错
  • 初始化一个新的二维数组,行数等于原数组的列数,列数等于原数组的行数
  • 通过双重循环遍历原数组,把对应位置的元素赋值到新数组里

具体代码实现

假设你的函数名必须是transpose,代码如下:

def transpose(matrix)
  # 处理空数组或空行的情况
  return [] if matrix.empty? || matrix.first.empty?

  # 转置后的数组行数 = 原数组的列数,列数 = 原数组的行数
  transposed_rows = matrix.first.length
  transposed_cols = matrix.length

  # 初始化转置后的数组结构
  transposed_matrix = Array.new(transposed_rows) { Array.new(transposed_cols) }

  # 双重循环完成元素映射
  transposed_rows.times do |i|
    transposed_cols.times do |j|
      transposed_matrix[i][j] = matrix[j][i]
    end
  end

  transposed_matrix
end

测试验证

可以用几个例子测试一下效果:

# 测试方阵转置
square_matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]
puts transpose(square_matrix).inspect
# 输出:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

# 测试非方阵转置
non_square_matrix = [
  [1, 2],
  [3, 4],
  [5, 6]
]
puts transpose(non_square_matrix).inspect
# 输出:[[1, 3, 5], [2, 4, 6]]

# 测试空数组
puts transpose([]).inspect # 输出:[]
puts transpose([[]]).inspect # 输出:[]

这个实现完全避开了内置的transpose方法,也没改函数名,输出结果和内置方法是一致的~

内容的提问来源于stack exchange,提问作者Justin Cefai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:47:50