|
|
Perl хэш двумурных массивов
Добрый день!
Использую 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}} - уже на этом этапе ошибка.
заранее спасибо!
|
победил!
ошибка крылась в присваении матрицы в хэш. попробовал присваивать так и всё встало на свои места
Код:
@{$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х элементов
}
тему можно закрывать =)
|
Время: 14:52.
© OSzone.net 2001-