Perl:向从哈希

时间:2017-01-17 14:47:03

标签: arrays perl hash

我有一个perl脚本,我们将Hash转换为数组 -

my %info = (
          'name'    => $1,
          'ip'      => $2,
          'parent'  => '',
          'isLocal' => 0,
          'clip'    => 0,
          );
my @siteinfos = ();
push( @siteinfos, \%info );

现在我可以通过 -

访问数组了
foreach my $site(@siteinfos) {
if ( $site->{'name'} eq  $sitename)  {
 .....
}

首先我不确定这种转换是如何工作的。其次,现在我想以(key,pair)格式向这个数组中添加更多元素。我该怎么办?

2 个答案:

答案 0 :(得分:7)

首先,没有转换。

my @siteinfos = ();

定义数组@siteinfos并设置为空列表。当然,只需使用

就可以获得相同的结果
my @siteinfos;

接下来,声明

push( @siteinfos, \%info );

将对哈希%info的引用推送到@siteinfos作为该数组的唯一元素。

接下来,循环

foreach my $sinfo (@siteinfos) { # assuming original is a typo

最终将$sinfo别名化为@siteinfos中唯一的哈希引用。在循环体中,您可以通过推送到@siteinfos的引用访问原始哈希的元素。

现在,如果你做完了,事情会有所不同:

push @siteinfos, %info;

那会将@siteinfos设置为如下列表(顺序是非确定性的):

$VAR1 = [
          'ip',
          undef,
          'clip',
          0,
          'isLocal',
          0,
          'name',
          undef,
          'parent',
          ''
        ];

undef存在,因为运行脚本时匹配变量为空。现在,如果你想将另一个键值对推送到这个数组,这是微不足道的:

 push @siteinfos, $key, $value;

但是,当然,通过将哈希值分配给数组,您将无法通过键简单地查找值。此外,您可以继续将重复键推送到数组,但如果将其分配回另一个哈希:

my %otherinfo = @siteinfos;

然后只有偶数索引元素(键)的最后一个版本及其相应的奇数索引元素(值)才能存活。

答案 1 :(得分:5)

转换任何内容。您正在创建一个名为@siteinfos的新数组。

my @siteinfos = ();

然后添加一个条目,这是对哈希%info的引用。

push( @siteinfos, \%info );

现在,数组包含对%info的引用。那是$siteinfo[0]

在循环中,您迭代@siteinfos中的所有元素。 hashref现在进入$sinfo

如果要向该hashref添加更多键和值,只需将它们放入。

foreach my $sinfo (@siteinfos) {
    if ( $sinfo->{'name'} eq  $sitename)  {
        $sinfo->{foo} = "bar"; # as simple as this
    }
}