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