6

ハッシュの大きな配列があります。配列からハッシュを取得し、最初の配列を変更せずに新しい配列に挿入したいと考えています。ハッシュを配列にプッシュするのに問題があります。ハッシュである i 番目の要素にアクセスするにはどうすればよいですか。

my @myarray;
$my_hash->{firstname} = "firstname";
$my_hash->{lastname} = "lastname";
$my_hash->{age} = "25";
$my_hash->{location} = "WI";
push @myarray,$my_hash;

$my_hash->{firstname} = "Lily";
$my_hash->{lastname} = "Bily";
$my_hash->{age} = "22";
$my_hash->{location} = "CA";
push @myarray,$my_hash;

$my_hash->{firstname} = "something";
$my_hash->{lastname} = "otherthing";
$my_hash->{age} = "22";
$my_hash->{location} = "NY";
push @myarray,$my_hash;

my @modifymyhash;
for (my $i=0;$i<2; $i++)  {
        print "No ".$i."\n";
        push (@modifymyhash, $myarray[$i]);
        print "".$myarray[$i]."\n";  #How do I print first ith element of array which is hash.
 }
4

2 に答える 2

14

最初にすべきこと

use strict;
use warnings;

次に定義する

my $my_hash;

値を割り当てる前に初期化$my_hashします。そうしないと上書きされ、3 つの要素すべてが同じハッシュを指すためです。

$my_hash = {};

最後に、ハッシュのメンバーにアクセスします

$myarray[$i]->{firstname}

またはハッシュ全体を出力するには、たとえばData::Dumperを使用できます

print Dumper($myarray[$i])."\n";

または他の方法、Perlでハッシュの内容を出力するにはどうすればよいですか? またはPerl でハッシュ構造を出力するにはどうすればよいですか?

コメントを更新します。

ハッシュをコピーします

push (@modifymyhash, $myarray[$i]);

完全に機能する新しい配列に。で確認できます

foreach my $h (@myarray) {
    print Dumper($h), "\n";
}

foreach my $h (@modifymyhash) {
    print Dumper($h), "\n";
}

両方の配列が同じハッシュを持つこと。

参照だけでなくディープ コピーを作成する場合は、新しいハッシュを割り当ててith要素をコピーにコピーできます。次に、コピーを保存します@modifymyhash

my $copy = {};
%{$copy} = %{$myarray[$i]};
push (@modifymyhash, $copy);
于 2013-03-19T21:01:16.447 に答える
2

ハッシュを逆参照するには、次を使用します%{ ... }

print  %{ $myarray[$i] }, "\n";

これはおそらくまだあなたが望むことをしません。ハッシュを適切に出力するには、それを反復処理する必要があります。「適切な」文字列化はありません。

print $_, ':', $myarray[$i]{$_}, "\n" for keys %{ $myarray[$i] };
于 2013-03-19T21:02:11.567 に答える