Как создать имя массива переменных в цикле foreach для perl - PullRequest
0 голосов
/ 24 мая 2018

Я хотел бы создать массив внутри цикла foreach, который сам меняет имя

our $j = 1;

foreach $key ( sort keys %hash ){
    @array1 = $hash{$key};
    $j++;
}

Как мне изменить имя массива с помощью $j.Как и каждый ключ, имя моего массива изменится с @array1, @array2, @array3....

1 Ответ

0 голосов
/ 24 мая 2018

Для этого потребуется символьные ссылки , а вы не хотите делать это .Это опасная функция, которая действительно необходима и используется очень редко по очень конкретным причинам.Для всех других целей существуют и другие, более эффективные способы.

Вместо этого используйте анонимные массивы (или массив ссылки ), хранящиеся в структуре данных с массивом

my @data;
foreach $key (sort keys %hash) {
    push @data, [ ... ];          # (populate with $hash data) 
}

или хеш

my %data;
foreach $key (sort keys %hash) {
    my $name     = ...;            # work out a suitable key-name
    $data{$name} = [ ... ];        # populate with $hash data
}

Я не знаю, что помещать в анонимные массивы [ ... ], или каковы хорошие названия для ключей ($name), так как этоне указано, что находится в хеше.

Возможно, что ваши хеш-значения на самом деле являются массивами, и в этом случае

my @data;
foreach $key (sort keys %hash) {
    push @data, $hash{$key}; 
}

, кажется, подходит под вопрос, но на самом деле просто

my @data = map { $hash{$_} } sort keys %hash;

или, если вам не нужен предсказуемый порядок, основанный на ключах

my @data = values %hash;

Но я предполагаю, что есть еще что-то, что нужно сделать с данными хеша, прежде чем они будут сохранены в массивах.

Тогда вы можетессылаться на отдельный массив (ссылки) по индексу (или по имени в случае хэша).

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