在 Ruby 中,给定一个表示二维数字网格的数组数组,您将如何提取特定的子二维数组?
a = [[0, 3, 1, 5, 5],
[4, 6, 8, 3, 5],
[7, 1, 4, 0, 8],
[0, 8, 8, 7, 4],
[7, 2, 4, 5, 4]]
require 'pp'
pp sub_array(a,1..4,2..4)
#=> [[8, 3, 5],
#=> [4, 0, 8],
#=> [8, 7, 4],
#=> [4, 5, 4]]
使用 Matrix
很“容易”做到这一点图书馆:
m = Matrix[*a]
p m.minor(1..4,2..4).to_a
#=> [[8, 3, 5], [4, 0, 8], [8, 7, 4], [4, 5, 4]]
但是,我确信有一种不使用 Matrix 的优雅方法可以做到这一点,可能涉及 zip 或 transpose :)
我在此处包括“二维”一词以表示搜索命中。
最佳答案
def sub_array(xs, rows, columns)
xs[rows].map { |row| row[columns] }
end
sub_array(a, 1..4, 2..4)
#=> [[8, 3, 5], [4, 0, 8], [8, 7, 4], [4, 5, 4]]
关于ruby - 提取二维子数组(不使用矩阵),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086910/