/ / Perl: krájanie množstva hashov - polí, perl, plátok

Perl: nakrájanie množiny hashov - polí, Perl, plátok

Výstup nižšie uvedeného kódu je vždy prázdny. Nie ste si istý, čo robím zle a ocitol by som akúkoľvek pomoc. Ako sa dostanem k hodnotám kľúča v konkrétnom hash v súbore hash?

use strict;
use warnings;

my %dot1 = ("a"=>1,"b"=>2);
my %dot2 = ("a"=>3,"b"=>4);
my %dot3 = ("a"=>5,"b"=>6);
my %dot4 = ("a"=>7,"b"=>8);

my @array = (%dot1,%dot2,%dot3,%dot4);

my %x = $array[2];
my $y = $x->{"a"};

print "$y n";

odpovede:

4 pre odpoveď č. 1

Ak chcete poľa hash odkazov, musíte povedať tak explicitne.

my @array = (%dot1, %dot2, %dot3, %dot4);
my %x = %{$array[2]};
my $y = $x{a};
print "$yn";

5 pre odpoveď № 2

Nemáte poľa hashov, Máte pole, ktoré vyzerá ako hash, kde sú kľúče a a b budú tam štyrikrát v pomerne náhodnom poradí.

print Dumper @array;
$VAR1 = [
"a",
1,
"b",
2,
"a",
3,
"b",
4,
"a",
5,
"b",
6,
"a",
7,
"b",
8
];

Potom používate $x->{a}, čo je syntax prijať kľúč a z hashref $x, ale iba ste deklarovali hash %a, To zase prelomí, pretože mu dáte zoznam nepárnych veľkostí jednej hodnoty.

Namiesto toho pridajte odkazy na hash do poľa. Týmto spôsobom získate viacúrovňovú štruktúru údajov namiesto plochého zoznamu. Potom urobte x variabilný a skalárny $x.

my %dot1 = ("a"=>1,"b"=>2);
my %dot2 = ("a"=>3,"b"=>4);
my %dot3 = ("a"=>5,"b"=>6);
my %dot4 = ("a"=>7,"b"=>8);

my @array = (%dot1,%dot2,%dot3,%dot4); # here


my $x = $array[2]; # here
my $y = $x->{"a"};

print "$y n";

Toto bude tlačiť 5.

Mali by ste si prečítať údaje o štruktúrach dát v systéme Windows perlref a perlreftut.


2 pre odpoveď č. 3

Čo chcete urobiť, je pridať odkazy na vaše hash @array, inak perl vyhodnotí hash v kontexte zoznamu.

my @array = (%dot1,%dot2,%dot3,%dot4);
my $x = $array[2];
my $y = $x->{"a"};

print "$y n";