提取2D子阵列(不使用Matrix)

时间:2011-11-10 21:56:21

标签: ruby arrays matrix

在Ruby中,给定一个表示数字2D网格的数组数组,您将如何提取特定的二维数组?

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或转置:)

我在搜索点击中包含“二维”字样。

1 个答案:

答案 0 :(得分:8)

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]]