Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   [решено] Perl хэш двумурных массивов (http://forum.oszone.net/showthread.php?t=318526)

Тишина 06-09-2016 15:19 2666193

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}} - уже на этом этапе ошибка.

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

Тишина 06-09-2016 15:46 2666203

победил!

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

@{$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.

Время: 14:52.
© OSzone.net 2001-