Ruby 如何从数组中提取数组?

Ruby 如何从数组中提取数组?,ruby,arrays,Ruby,Arrays,我有二维数组 arr = [[1, 2, 1, 1], [1, 1, 1, 1], [1, 4, 4, 4], [1, 4, 8, 4], [1, 4, 4, 4]] 提取包含大量4s的阵列的最佳方法是什么 当我只知道左上角的索引时 arr[1][2] 从第二行开始获取三行,每行从第一行开始获取三个元素(基于0)。另一个选项: arr[2..-1].map { |a| a[1..-1] } # => [[4, 4, 4], [4

我有二维数组

arr = [[1, 2, 1, 1],
       [1, 1, 1, 1],
       [1, 4, 4, 4],
       [1, 4, 8, 4],
       [1, 4, 4, 4]]
提取包含大量4s的阵列的最佳方法是什么 当我只知道左上角的索引时

arr[1][2] 
从第二行开始获取三行,每行从第一行开始获取三个元素(基于0)。

另一个选项:

arr[2..-1].map { |a| a[1..-1] }
# => [[4, 4, 4], [4, 8, 4], [4, 4, 4]]
这种方法是泰勒为之设计的

代码

require 'matrix'

def pull_subarray(arr, row_range, col_range)
  Matrix[*arr].minor(row_range, col_range).to_a
end
示例

pull_subarray(arr, 1..-1, 2..-1)
  #=> [[1, 1],
  #    [4, 4],
  #    [8, 4],
  #    [4, 4]]

pull_subarray(arr, 1..2, 2..3)
  #=> [[1, 1],
  #    [4, 4]]

你到底想实现什么?制作一个新的更小的3x3数组。你可能想从2D数组中找到一个子矩阵吗?为什么要急于选择答案?首先,这对其他仍在准备答案的人来说是一种失礼。
pull_subarray(arr, 1..-1, 2..-1)
  #=> [[1, 1],
  #    [4, 4],
  #    [8, 4],
  #    [4, 4]]

pull_subarray(arr, 1..2, 2..3)
  #=> [[1, 1],
  #    [4, 4]]