Отслеживание количества элементов в массиве повторяется?

Есть ли способ, которым количество элементов, повторяемых в цикле for, можно отследить в perl: Как с помощью специальных переменных:

@arrayElements = (2,3,4,5,6,7,67);
foreach (@arrayElements) {
    # Do something
    # Want to know how may elements been iterated after 
    # some n number of elements processed without using another variable.
}

3 ответа

Решение

В Perl5 v12 и более поздних версиях вы можете использовать each итератор:

while(my($index, $element) = each @array_elements) {
  ...;
}

Однако более переносимым решением является итерация по индексам и ручный доступ к элементу, как показано ysth.

В любом случае количество посещенных элементов (включая текущий элемент) равно $index + 1,

Либо просто посчитайте, как вы идете:

my $processed = 0;
foreach my $element (@array_elements) {
    ...
    ++$processed;
}

или вместо этого переберите индексы:

foreach my $index (0..$#array_elements) {
    my $element = $array_elements[$index];
    ...
}

Вы можете получить количество элементов в массиве как

    my $num = @arrayElements;
    print $num;

ИЛИ ЖЕ

   my $num = scalar (@arrayElements);
   print $num;

ИЛИ ЖЕ

   my $num = $#arrayElements + 1;
   print $num;

И для нахождения количества повторяющихся элементов мы можем использовать следующий код:

my $count = 0;  #initially set the count to 0
foreach my $index(@arrayElements)
{
  $count++;
}
print $count;
Другие вопросы по тегам