Как я могу получить доступ к элементам массива с помощью foreach? - PullRequest
0 голосов
/ 21 марта 2020

Это мой массив в Perl:

@test = ("user1","user1val1","user1val2","user3val1","user2","user2val1","user2val2","user2val3");

Как получить доступ к элементам с foreach? Тест, который я тестирую, не работает:

foreach my $dataLine(@test)
{
    print $dataLine[0];
}

Я хочу получить доступ к значениям "user1" и "user2".

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

$dataLine - скаляр, поэтому индекс [0] отсутствует:

for my $dataLine (@test)
{
    print $dataLine, "\n";
}

Если вы хотите получить доступ только к позициям 0, 4 и т. Д. c., Вы можете использовать

for my $dataline (@test[ grep 0 == $_ % 4, 0 .. $#test ])
{
    print $dataline, "\n";
}

Используется оператор по модулю %, $#test - индекс последнего элемента в @test.

Или, если вы хотите исключить элементы с val в них:

for my $dataline (grep ! /val/, @test) {
    print "$dataline\n";
}
1 голос
/ 21 марта 2020

Непонятно, хотите ли вы / нужно использовать список. Если посмотреть на ваши данные, то, возможно, вы захотите использовать кнопку ha sh, указанную пользователем, указывающую на список пользовательских значений. Примерно так:

#!/usr/bin/perl

use warnings;
use strict;

my %test = (
    "user1" => ["user1val1", "user1val2"],
    "user2" => ["user2val1", "user2val2", "user2val3"],
    "user3" => ["user3val1"],
);

foreach my $user (sort keys %test) {
    print("$user:\n");
    foreach my $user_value (sort @{$test{$user}}) {
        print "    $user_value\n"
    }   
}

, который выдаст следующее:

$ ./test.pl 
user1:
    user1val1
    user1val2
user2:
    user2val1
    user2val2
    user2val3
user3:
    user3val1

Обратите внимание, что список пользователей является массивом, а не массивом. Лично я бы использовал га sh ref, как это:

#!/usr/bin/perl

use warnings;
use strict;

my $test = {
    user1 => [ qw(user1val1 user1val2) ],
    user2 => [ qw(user2val1 user2val2 user2val3)],
    user3 => [ qw(user3val1)],
};

foreach my $user (sort keys %{$test}) {
    print("$user:\n");
    foreach my $user_value (sort @{$test->{$user}}) {
        print "    $user_value\n"
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...