Извлечь 2D подмассив (без использования матрицы) - PullRequest
1 голос
/ 11 ноября 2011

В Ruby, учитывая массив массивов, представляющих двумерную сетку чисел, как бы вы извлекли конкретный суб-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 или transpose:)

Я включаю слова "двумерный" здесь для поисковых хитов.

1 Ответ

8 голосов
/ 11 ноября 2011
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]]
...