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

发布于 2024-12-15 00:13:21 字数 655 浏览 0 评论 0原文

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

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

但是,我确信有一种优雅的方法可以在不使用矩阵的情况下完成此操作,可能涉及 zip 或转置:)

我在这里包含“二维”一词用于搜索点击率。

In Ruby, given an array-of-arrays representing a 2D grid of numbers, how would you extract a specific sub-2D array?

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

This is 'easy' to do using the Matrix library:

m = Matrix[*a]
p m.minor(1..4,2..4).to_a
#=> [[8, 3, 5], [4, 0, 8], [8, 7, 4], [4, 5, 4]]

However, I feel certain that there's an elegant way to do this without using the Matrix, perhaps involving zip or transpose :)

I'm including the words "two-dimensional" here for search hits.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘿看小鸭子会跑 2024-12-22 00:13:21
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]]
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]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文