perl - 在 Perl 中遍历多维散列

标签 perl scripting multidimensional-array

如果您在 perl 中有一个具有多个维度的散列(或对散列的引用)并且您想要遍历所有值,那么最好的方法是什么。换句话说,如果我们有
$f->{$x}{$y},我想要类似的东西

foreach ($x, $y) (deep_keys %{$f})
{
}

代替
foreach $x (keys %f) 
    {
    foreach $y (keys %{$f->{$x}) 
    {
    }
}

最佳答案

第一阶段:不要重新发明轮子:)

快速search on CPAN抛出了非常有用的Data::Walk .定义一个子程序来处理每个节点,然后你就被排序了

use Data::Walk;

my $data = { # some complex hash/array mess };

sub process {
   print "current node $_\n";
}

walk \&process, $data;

鲍勃是你的叔叔。请注意,如果你想传递一个散列来遍历,你需要传递一个对它的引用(参见 perldoc perlref ),如下所示(否则它也会尝试处理你的散列键!):
walk \&process, \%hash;

如需更全面的解决方案(但在 CPAN 中乍一看更难找到),请使用 Data::Visitor::Callback或其父模块 - 这具有让您更好地控制您所做的事情的优势,并且(仅用于额外的街头信誉)是使用 Moose 编写的。

关于perl - 在 Perl 中遍历多维散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/160175/

相关文章:

perl - Template::Tookit,自动在html源中显示模板名称

javascript - 使用 javascript 小书签在网页中查找 'old' 的所有实例并将每个实例替换为 'new'

java - 在java中将2个数组变成二维数组

java - 检查二维数组Index是否为空,如果不是则生成新的Index

c - 二维字符数组太大退出代码 139

mysql - 在 RDBO 中延迟且从未创建的外键关系方法

perl - 在@INC 中高级搜索函数

perl - 对键包含非字母数字字符的哈希进行排序

linux - 如何在 bash 字符串变量中用 $HOME 的值替换前导波浪号 ~,反之亦然?

linux - 无法在 git hook 预推脚本调用的 shell 脚本中获取用户的输入