В Perl, как вы создаете и используете массив хэшей? - PullRequest
2 голосов
/ 01 сентября 2010

Как создать Perl-программу, которая содержит массив и этот массив указывает на хеш?

Это так наглядно,

(M1)        (M2)        ...it goes on
 |--k1=>v1   |--K1=>v1
 |--k2=>v2   |--k2=>v2

Я должен получить доступ к этому массиву M1, затем к хешу, который он содержит внутри. (и так далее) ...

Ответы [ 5 ]

4 голосов
/ 01 сентября 2010

Это должно сработать, хотя мне не совсем понятно, как вы хотели, чтобы «М1» и «М2» сыграли в сценарии:

my(@array) = ( { k1 => "v1", k2 => "v2" }, { K1 => "V1", K2 => "V2" } );

print "$array[0]->{k1}\n";
print "$array[1]->{K2}\n";

Вы делаете свою жизнь более интересной, когдаВы используете разные наборы ключей в разных элементах массива (k1 и k2 против K1 и K2).Это далеко не запрещено, но усложняет обработку.

4 голосов
/ 01 сентября 2010

Вам нужно использовать хеш ссылки :

my @array;    
push @array, { k1=>"v1", k2=>"v2" }, { k1=>"v1", k2=>"v2" };

Затем получите доступ к хешам следующим образом:

my $val = $array[0]{k1};
1 голос
/ 01 сентября 2010

В интересах научить вас ловить рыбу, вот ссылка на поваренную книгу структур данных Perl (perldsc) по созданию сложных структур данных в Perl.

1 голос
/ 01 сентября 2010

Что-то вроде:

%h1 = ('a'=>'abc','b'=>'bcd'); # hash 1
%h2 = ('A'=>'Abc','B'=>'Bcd'); # hash 2
@arr = (\%h1,\%h2); # array of hash references.
foreach $hash_ref (@arr) { # iterate through the array.
        foreach $key(keys %$hash_ref) { # iterate through the hash.
                print $key.' '.$$hash_ref{$key}."\n"; #print key => value
        }   
}
0 голосов
/ 01 сентября 2010

Вам нужна ссылка на хеш, как отмечено {} ниже.

my @array = ({ k1 => "v1", k2 => 'v2' }, { K1 => 'V1', });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...