печать элемента массива путем присвоения переменным

#perl

#perl

Вопрос:

Я не могу распечатать значения элементов массива, как ожидалось. @array = (1,2,3,4,5,6,7,8);

Я хочу присвоить первое значение переменной a, а второе — переменной b

 for (my $index = 0; $index <= $# array; $index  ) {
    my $a = @array[$index];
    my $b = @array[$index   1];
    DEBUG("DEBUG:: $a and $b");
}
  

Я хочу выводить как

     a=1 and b=2
    a=3 and b=4
    a=5 and b=6
  

Комментарии:

1. for (my $index = 0; $index <= $# array; $index ) это способ записи for my $index (0..$#array)

2. Избегайте использования $a и $b , поскольку их использование может конфликтовать с sort и другими функциями с обратными вызовами.

Ответ №1:

Основная причина вашей проблемы заключается в том, что вы должны использовать ‘$index = 2’ вместо ‘$index ‘ для увеличения $index.

Ответ №2:

 #!/usr/bin/perl
use strict;
use warnings;

my @array = (1,2,3,4,5,6,7,8);

my %hash = @array;

while (my ($key,$value) = each %hash) {
    print "Key is $key, Value is $valuen";
}
  

ДЕМОНСТРАЦИЯ

Другой способ

 #!/usr/local/bin/perl
use strict;
use warnings;
my @array = (1,2,3,4,5,6,7,8);
for (my $count=0; $count<@array; $count =2){
    print "A is $array[$count], B is $array[$count 1]n";
}
  

ДЕМОНСТРАЦИЯ

Ваш способ

 #!/usr/local/bin/perl
use strict;
use warnings;
my @array = (1,2,3,4,5,6,7,8);
for ( my $index=0;$index<=$#array;$index =2)   {
    my $a1 = @array[$index];
    my $b1 = @array[$index 1]; 
    print "A is $a1, B is $b1n";
}
  

ДЕМОНСТРАЦИЯ

Комментарии:

1. Спасибо, ты звезда

2. Первый вариант будет печатать их парами, но они могут быть не в порядке

3. Да, поскольку он находится в хэше. Я не уверен, нужен ли OP упорядоченный вывод. Я отредактирую, если он подтвердит.

Ответ №3:

Когда я правильно понимаю вашу проблему, вы хотите иметь цикл, увеличивающийся на 2:

 use strict;
use warnings;
use feature 'say';
my @array = (1, 2, 3,4,5,6,7,8);
my (@array_a, @array_b);
for (my $count=0; $count < $#array; $count =2) {
  say "a is $array[$count], b is $array[$count 1]";
}
  

Вывод:

 a is 1, b is 2
a is 3, b is 4
a is 5, b is 6
a is 7, b is 8
  

Ответ №4:

Вы могли бы использовать оператор модуля:

 #!/usr/bin/perl
use warnings;
use strict;

my @array = (1 .. 8);

foreach (@array){
    $_ % 2 == 0 ? print "b = $_n" : print "a = $_t";
}
  

 a = 1   b = 2
a = 3   b = 4
a = 5   b = 6
a = 7   b = 8
  

Ответ №5:

Очень простой подход, который еще не упоминался:

 while (@array) {
    my $x = shift(@array);
    my $y = shift(@array);
    DEBUG("DEBUG:: $x and $y");
}
  

Однако это имеет побочный эффект опорожнения @array .

Ответ №6:

Как отмечали другие, простое решение заключается в изменении вашего приращения цикла на = 2 . Альтернативный подход заключается в использовании splice :

 my @array = (1,2,3,4,5,6,7,8);

while (my ($x, $y) = splice @array, 0, 2) {
    DEBUG("DEBUG:: $x and $y");
}
  

Это удаляет элементы из @array , поэтому вам может потребоваться сначала сделать копию.