ruby - 提取二维子数组(不使用矩阵)

标签 ruby arrays matrix

在 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/

相关文章:

ruby - 如何从混合模块调用 `self.class`?

无法在 "C"中找到变量的空间(100 字节)

javascript - 如何在数组中的每两个值之后将 js .join() 方法应用于我的数组

python - 从 tensorflow 中的向量构造成对矩阵

numpy - 设置(M x N x N)矩阵对角线的快速方法? Einsum/n维fill_diagonal?

ruby - 如何使用 Rugged 查找提交中更改的文件?

ruby - 是否可以在 Rspec 中访问周围上下文的主题?

ruby-on-rails - rails 生成 rspec :install config/environments/development. rb:1:in `<top (required)>': 未定义方法 `configure'

php - 为什么 php 数组中 null 键的值更改为 1?

list - 如何从名称与值配对的列表构建矩阵