2013-03-19 30 views
5

我有一个大的散列数组,我想从数组中获取一些散列并插入到新数组中而不更改第一个数组。我有问题将哈希推向数组,我如何访问哈希的第i个元素。如何访问perl中的散列数组?

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. 
} 

回答

12

首先,你应该

use strict; 
use warnings; 

然后定义

my $my_hash; 

初始化$my_hash您指定值之前,否则您覆盖它和所有三个要素指向相同的哈希

$my_hash = {}; 

最后,访问散列成员

$myarray[$i]->{firstname} 

或打印整个哈希,您可以使用Data::Dumper例如

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

或其他方法,How can I print the contents of a hash in Perl?How do I print a hash structure in 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); 
+0

我已经使用了字符串和警告。我还初始化并定义了my_hash。我想将整个散列推入新阵列。不管怎么说,还是要谢谢你。 – mysteriousboy 2013-03-19 21:11:32

+1

@mysteriousboy你已经将哈希推入'@ modifymyhash'。那有什么问题? – 2013-03-19 21:16:51

2

的副本存储取消引用哈希,使用%{ ... }

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

这可能仍然无法做你想做的。要打印一个散列很好,你必须遍历它,没有“很好”的字符串化:

print $_, ':', $myarray[$i]{$_}, "\n" for keys %{ $myarray[$i] }; 
相关问题