Perl中如何高效查找多维哈希中DIR值为BASE的键?
筛选哈希中DIR值为"BASE"的键
你为对比和合并文件特征,构建了如下Perl多维哈希结构:
$cumulative{$slice} = { DATA => $data, META => $got_meta, RECOVER => $recover, DISPO => $dispo, DIR => $dir, };
其中除DIR是普通字符串外,其他键对应的都是哈希或数组引用。你需要找出所有$slice键,要求其对应的DIR值为"BASE"。
你之前尝试用grep实现但代码有误,错误代码如下:
my (@base_slices) = grep { $cumulative{$_}->{DIR} eq "BASE" } @{$cumulative{$_}};
其实完全可以用grep实现,不需要自己写显式循环,问题出在你给grep的第二个参数错了——应该传入%cumulative的所有键列表,而不是@{$cumulative{$_}}(这个写法逻辑上完全不成立)。
正确的代码写法是:
my (@base_slices) = grep { $cumulative{$_}->{DIR} eq "BASE" } keys %cumulative;
这个写法里,Perl会在内部循环处理每个键,但你不需要手动写循环代码,用grep就能简洁完成筛选需求。
内容的提问来源于stack exchange,提问作者WetCheerios
相关产品推荐
相关产品推荐

