当前位置:  开发笔记 > 编程语言 > 正文

Perl:向从hash创建的数组中添加更多元素

如何解决《Perl:向从hash创建的数组中添加更多元素》经验,为你挑选了2个好方法。

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

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)格式向这个数组中添加更多元素.我该怎么做?



1> Sinan Ünür..:

首先,没有转换.

my @siteinfos = ();

定义一个数组@siteinfos并设置为空列表.当然,你可以通过使用just获得相同的结果

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;

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



2> simbabque..:

没有转换任何东西.您正在创建一个名为的新数组@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
    }
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有