Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > срезы двумерных массивов


Автор: Ramirez 13.8.2007, 00:57
Всем привет. Посоветуйте, как оптимально решить такую задачу:

Есть двумерный массив типа 

Код

$arr[x][y] = z
 

он представляет координатную сетку.
Мне необходимо делать выборки типа:

Код

5<x<10 and 2<y<7


т.е. выбирать области этой координатной сетки.
Кроме двух вложенных циклов for ... ничего больше в голову не приходит. 

Код

for x (5..10) {
  for y (2..7) {
     ....
  }
}


Есть-ли еще какие нибудь варианты решения? интересует скорость, т.к. массив может быть достаточно большой.

спасибо.

Автор: Nab 13.8.2007, 03:32
Не совсем понятен вопрос, что в результате получить то нужно?

Если такую же матрицу, составляющую подможество данной, то вот так думаю проще всего:

Код

# Это оригинальный массив, заполняйте сами
my @orig = ();
# это результирующий
my @res = ();
# без одного цикла всеже не обойтись
# срез среза не получишь :(
foreach (@orig[5..10]) { push @res, [@{$_}[2..7]] }

Автор: Nab 13.8.2007, 03:49
Или вот такой вариант, он мне больше понравился smile

Код

@res = map { [@{$_}[2..7]] } @orig[5..10];

Автор: Ramirez 13.8.2007, 09:35
спасибо, это как раз то что надо. мне как раз хотелось вариант с map увидеть. а с точки зрения производительности есть разница?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)