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


Автор: _hunter 11.12.2007, 12:30
Добрый день.

Можно ли как-то в Perl'е создавать/использовать такие структуры данных как двумерные массивы и map-ы векторов?

С уважением... 

Автор: tishaishii 11.12.2007, 13:28
Код

my@var=(
   [1..2], [4, 'a']
);
print join("\t", @$_), "\n" foreach @var;


Код

$\="\n";

sub iter {
   my$var=\shift;
   +sub {++$$var+2*shift}
};

my$from=102;
my$iter=&iter($from);

print &$iter($from) while $from++<200;
print '$from=', $from;

Автор: AlexPet 11.12.2007, 13:33
Лучше всего на эту тему полистать книгу 
O'Reilly - Intermediate Perl (1st Edition, 2006)
А так, двумя словами: двумерный массив - это одномерный массив, состоящий из ссылок на одномерные массивы
Код

my @arr1 = (1, 2);
my @arr2 = (3, 4);
my @arr = (\@arr1, \@arr2);

Код

my @arr = ([1, 2], [2, 4]);


Упс, пока писал ответ, опередили smile

Автор: _hunter 11.12.2007, 13:35
а что такое [1..2] в первом примере? -- задание размера?
и как мне поотдельности получить каждый елемент в foreach-е? -- @$_[0]?

второй пример я вообще не понял...

Автор: AlexPet 11.12.2007, 13:38
Цитата(AlexPet @  11.12.2007,  13:33 Найти цитируемый пост)
Лучше всего на эту тему полистать книгу 
O'Reilly - Intermediate Perl (1st Edition, 2006)


Автор: tishaishii 11.12.2007, 13:45
Получить первый элемент:
Код
print join("\t", $$_[1]), "\n" foreach @var;

Что такое 1..10, 'a'..'z':
Код
print join "\n", 1..10;

Второй пример показывает возможность создавать итераторы, т.е. функция создаёт другую функцию, которая может пользоваться адресным пространством родительской. С помощью итераторов можно просматривать последовательности не храня их, а на ходу формируя нужный элемент последовательности.

Автор: _hunter 11.12.2007, 13:50
AlexPet, я видел smile
но мне это нужно сейчас на сейчас. и, возможно, одноразово. т.е. ехать за книгой нет ни времени ни (еще не уверен) необходимости.

Автор: shamber 11.12.2007, 14:10
_hunter, можете попробовать в интернете эту книгу найти.... точно есть smile

Автор: AlexPet 11.12.2007, 14:24
http://www.pdfchm.com/book/intermediate-perl-1660/
только на сайте нужно зарегиться (бесплатно), и это того стоит

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