Perl: утверждение карты - PullRequest
1 голос
/ 10 июля 2011

Мне нужна ваша помощь, потому что я не могу понять, что означает следующая строка:

map {@$_[1 .. 4]} @msft

найдено в примере кода GD :: Graph :: ohlc ,Не могли бы вы дать мне подсказку?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 июля 2011

@msft - это массив массивов, в котором каждый внутренний массив содержит 5 элементов (дата, цены открытия / минимума / максимума / закрытия).

map принимает каждый элемент @msft, чтоявляется ссылкой на массив, хранящейся в $_ и разыменовывает ее через @$_ и берет часть этого массива (а именно, элементы со второго по пятый, поскольку массив основан на 0) через [1..4].Затем он возвращает эти четыре элемента.map объединяет их в один список.

По сути, он сводит массив массивов из пяти элементов в один массив, состоящий из 2-5-го элементов каждого подмассива.

3 голосов
/ 10 июля 2011

Элементы @msft являются ссылками на массив. Код собирает элементы с 1 по 4 из каждого массива в один список:

my @msft = (
    [0,1,2,3,4,5],
    [0,11,22,33,44,55],
    [0,111,222,333,444,555],
);

my @result = map {@$_[1 .. 4]} @msft;

print "@result\n";  # 1 2 3 4 11 22 33 44 111 222 333 444

Из документации для карты :

Оценивает BLOCK или EXPR для каждого элемент LIST (локально устанавливая $ _ в каждый элемент) и возвращает список значение состоит из результатов каждого такая оценка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...