我有2d数组
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 :(得分:2)
arr[2, 3].map { |row| row[1, 3] }
# => [[4, 4, 4], [4, 8, 4], [4, 4, 4]]
从第二行开始获取三行,每行从第一行开始获取三个元素(从0开始)。
答案 1 :(得分:1)
方法Matrix#minor是为此而制定的。
<强>代码强>
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]]
答案 2 :(得分:0)
另一种选择:
arr[2..-1].map { |a| a[1..-1] }
# => [[4, 4, 4], [4, 8, 4], [4, 4, 4]]