[Moscow.pm] Как узнать количество элементов в массиве?

Ilya Chesnokov chesnokov.ilya на gmail.com
Пн Фев 27 02:38:37 PST 2017


27 февраля 2017 г., 13:32 пользователь seiwm via Moscow-pm
<moscow-pm на pm.org> написал:
> Разъясните сферу практического применения для size.
> Или это так заради академического интереса чтоб было как в C++

Нда, действительно. Налицо некоторое несоответствие терминологии.

Я под размером массива понимаю количество элементов, реально
существующих в памяти. В Perl если вы присвоили что-то элементу 999,
выделится память под всю тысячу элементов. Вот простой пример:

perl -MDevel::Size=size -E 'my @a; for my $index (0..9, 10, 1000, 10
** 6) { $a[$index] = 1; say "$index: " . size(\@a) }'

0: 96
1: 96
2: 96
3: 96
4: 104
5: 112
6: 128
7: 128
8: 144
9: 144
10: 160
1000: 8088
1000000: 8001672


>
> 27.02.2017, 13:21, "Alessandro Gorohovski" <an.gorohovski на gmail.com>:
>
> 27 февраля 2017 г., 12:59 пользователь seiwm <seiwm на yandex.ru> написал:
>
> in really is 1001 элемент
> да и length в других языках выдает обычно количество элементов похуй пустых
> не пустых
>
>
>
> Тут вы погорячились (так бывает "с устатку и не евши, но - как стекло
> был,...")
> undef is not really element
>
> А у других (e.g. C++, хот/я и не поклонник его) существуют методы
> .capacity() --- ёмкость
> .size()  --- кол-во элементов
>
>
>
>
> 27.02.2017, 12:51, "Alessandro Gorohovski via Moscow-pm" <moscow-pm на pm.org>:
>
> 27 февраля 2017 г., 12:42 пользователь Ilya Chesnokov
> <chesnokov.ilya на gmail.com> написал:
>
> 27 февраля 2017 г., 12:08 пользователь Alessandro Gorohovski via
> Moscow-pm <moscow-pm на pm.org> написал:
>> 27 февраля 2017 г., 11:59 пользователь seiwm via Moscow-pm
>> <moscow-pm на pm.org> написал:
>>>
>>> Например, документированный способ определить количество элементов в
>>> массиве — обратиться к нему в скалярном контексте . Так как скалярная
>>> переменная может содержать только скаляр, присвоение массива скаляру
>>> налагает на операцию скалярный контекст, и массив, вычисленный в
>>> скалярном
>>> контексте,возвращает количество элементов в этом массиве:
>>> my $count = @items;
>>
>>
>> Здесь не все так однозначно
>> :)
>> Массив то может быть и разреженный.
>
> Я может что-то путаю, но в Perl такого понятия нет.
> Это вас Lua-прогер покусал.
>
>
> Ошибаетесь, уважаемый.
> Как это нет?!
>
> На вскидку:
>
> my @a;
> $a[1000] = 1000;
>
> ~~@a is 1001
> in really is 1 элемент
>
>
>
>>>
>>>
>>> 26.02.2017, 13:06, "Anatoly Y. via Moscow-pm" <moscow-pm на pm.org>:
>>>
>>> perl -E '@arr="abc"; say join(//, на arr)=~y===c’
>>>
>>> :)
>>>
>>>
>>> On 26 Feb 2017, at 16:37, Alessandro Gorohovski via Moscow-pm
>>> <moscow-pm на pm.org> wrote:
>>>
>>> 25 февраля 2017 г., 21:32 пользователь Alexey Shrub via Moscow-pm
>>> <moscow-pm на pm.org> написал:
>>>
>>> On Сб, фев 25, 2017 в 5:26 , Иван Бессарабов via Moscow-pm
>>> <moscow-pm на pm.org> wrote:
>>> Наверняка размер массива можно узнать еще кучей способов. Я нашел вот
>>> такие варианты:
>>>
>>> Как обычно в перле, много разных способов, но ни одного нормального.
>>> Только мне кажется что нет ничего логичнее/метода функции len или lenght
>>> ?
>>>
>>>
>>> А какой смысл/логика в дополнительных сущностнях?
>>> 'Засоряют сознание' ~= s/о.я/e.a/.
>>>
>>>
>>>
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>> ,--
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>>
>>>
>>> --
>>> С уважением Программист
>>> Скачков Евгений Иванович
>>>
>>>
>>>
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>>
>
>
>
> --
> Best regards,
> Ilya Chesnokov
>
> ,--
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> С уважением Программист
> Скачков Евгений Иванович
> Компания GеneGo. http://genego.com/
> ICQ 81891536
>
>
>
>
> --
> С уважением Программист
> Скачков Евгений Иванович
> Компания GеneGo. http://genego.com/
> ICQ 81891536
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Best regards,
Ilya Chesnokov


Подробная информация о списке рассылки Moscow-pm