PDA

Показать полную графическую версию : [решено] Perl хэш двумурных массивов


Тишина
06-09-2016, 15:19
Добрый день!
Использую Perl 5.18 и пытаюсь добавить двумерные массивы в хэш (тип $hash{$key}=@matrix, где @matrix = двумерный массив, или массив массивов, кому как удобней в выражении). Помогите с выводом таких хэшей и адрессацией элементов.


пример кода в котором я задаю массив и присваиваю его в хэш

my %hash, @matrix;
my @hash_key=qw(firs second 3rd 4rd 5rd);

foreach (@hash_key) { # перебираем ключи для хэша

undef @matrix; # обнуляем массив

$n=1+int(rand(4)); # задаём кол-во строк в матрице
print "\n\n\t Strok $n\n";

for (my $j=0; $j<=$n; $j++) { # заполняем матрицу
push(@matrix,['n+j='.($n+$j), 'n-j='.($n-$j), 'n*j='.($n*$j)]); # добавляем в массив массив из 3х элементов
}

print "\n\n matrix chek:\n";
for (my $i=0; $i<$#matrix; $i++) {
print "\n$i\n";
print "$_\t" foreach(@{$matrix[$i]});
}


$hash{$_}=@matrix; # присваиваем очередному ключу матрицу
}


foreach my $key (sort keys %hash) { # перебор ключей хэша
print "\n Key:$key\n";

#
# а дальше пытаюсь вывести, и фэйл. что-то не так
#
for (my $i=0; $i<=$#{$hash{$key}}; $i++) {
print "\n$i\n";
print "$_\t" foreach(@{${$hash{$key}}[$i]});
}
}


подозреваю, что не правильно пытаюсь обратиться к значению хэша как к массиву @{$hash{$key}} - уже на этом этапе ошибка.

заранее спасибо!

Тишина
06-09-2016, 15:46
победил!

ошибка крылась в присваении матрицы в хэш. попробовал присваивать так и всё встало на свои места

@{$hash{$_}}=@matrix; # присваиваем очередному ключу матрицу


либо сразу пушить в хэш, дабы сыкономить на коде =)

for (my $j=0; $j<=$n; $j++) { # заполняем матрицу
push(@{$hash{$key}},['n+j='.($n+$j), 'n-j='.($n-$j), 'n*j='.($n*$j)]); # добавляем в массив массив из 3х элементов
}


тему можно закрывать =)




© OSzone.net 2001-2012