如何从数组中提取数组?

时间:2014-12-01 09:51:57

标签: ruby arrays

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

3 个答案:

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