arrays - 访问散列数组的更优雅的方式

标签 arrays perl hash perl-data-structures

首先,如果我在即将发布的帖子中出现任何术语错误,请表示歉意,这对我来说仍然很新。

一些背景知识,我有一个脚本可以检查我们存档的网络配置中的一组特定设置。因此,该脚本运行许多检查,并将结果添加到该检查的数组中。

例如 确保 syslog 已配置的检查被添加到名为 @internalsyslogerror 的数组中

运行所有检查后,所有检查的数组都会添加到哈希中,键是设备名称。

注意所有代码都使用严格,使用警告

使用以下命令;

$results{$configs} = [@internalsyslogerror, @bordersyslogerror, 
@borderntperror, @borderntperror, @internalntperror, 
@bordertacacserror, @internaltacacserror, @enablepasswordchecks,
@internalsnmpkeyserror, @timezoneerror, @configregistererror, 
@bannererror, @bootregistererror, @domainnameerror];

我遇到的问题是提取此信息的最优雅的方法是什么,我想减少为了向脚本添加新检查而必须进行的更改量。 目前,我必须将附加数组添加到上面的代码中,然后将取消引用部分添加到处理它的子程序中。

目前,我正在执行取消引用并将其输出到数组的操作,然后通过电子邮件发送该数组。

foreach my $k (keys %results) {
    push @results, "<b>$k</b><br>";
    if (defined $results{$k}[0] ){
    push @results, "$results{$k}[0]";
    }
    if (defined $results{$k}[1] ){
    push @results, "$results{$k}[1]";
    }
    if (defined $results{$k}[2] ){
    push @results, "$results{$k}[2]";
    }
    if (defined $results{$k}[3] ){  
    push @results, "$results{$k}[3]";
    }
    if (defined $results{$k}[4] ){
    push @results, "$results{$k}[4]";
    }
    if (defined $results{$k}[5] ){
    push @results, "$results{$k}[5]";
    }
    if (defined $results{$k}[6] ){
    push @results, "$results{$k}[6]";
    }
    if (defined $results{$k}[7] ){
    push @results, "$results{$k}[7]";
    }
    if (defined $results{$k}[8] ){
    push @results, "$results{$k}[8]";
    }
    if (defined $results{$k}[9] ){
    push @results, "$results{$k}[9]";
    }
    if (defined $results{$k}[10] ){
    push @results, "$results{$k}[10]";
    }
    if (defined $results{$k}[11] ){
    push @results, "$results{$k}[11]";
    }
    if (defined $results{$k}[12] ){
    push @results, "$results{$k}[12]";
    }
    if (defined $results{$k}[13] ){
    push @results, "$results{$k}[13]";
    }
}

问题是,我可以做上面做的事情,但以某种方式“即时”生成代码

谢谢

最佳答案

foreach my $k (keys %results) { 
   push @results, "<b>$k</b><br>"; 
   for my $result (@{$results{$k}) {
       next if (!defined $result);
       push @results, $result;
   }
}

甚至

foreach my $k (keys %results) { 
   push @results, "<b>$k</b><br>"; 
   push @results, grep { defined $_ } @{$results{$k}};
}

编辑:修复了上次推送中的拼写错误...

关于arrays - 访问散列数组的更优雅的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423605/

相关文章:

javascript - 在 JavaScript 中可以实现数组减法的最快数量级是多少?

objective-c - 我可以使用 [NSObject hash] 将 NSView 存储在字典中吗?

regex - 如何删除重复的字符并仅在 Perl 中保留唯一的字符?

regex - 如何快速找到与正则表达式匹配的文件的第一行?

perl - 如何在 Perl 中组合哈希值?

arrays - Ruby:哈希数组 - 如何根据作为数组的哈希键删除重复项

c++ - 当用户在 unordered_map 中自定义哈希函数时,无法解码 g++ 中模糊的编译器错误

arrays - 在大矩阵中查找许多子矩阵的总和?

javascript - 拼接不是函数错误

如果在数组中找到值,则 Java 返回索引