Phr*_*ogz 1 ruby arrays matrix
在Ruby中,给定一个表示数字2D网格的数组数组,您将如何提取特定的子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]]
Run Code Online (Sandbox Code Playgroud)
这很容易使用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]]
Run Code Online (Sandbox Code Playgroud)
但是,我确信有一种优雅的方法可以在不使用Matrix的情况下执行此操作,可能包含zip或转置:)
我在这里搜索"二维"字样用于搜索命中.
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]]
Run Code Online (Sandbox Code Playgroud)