【发布时间】:2014-05-30 18:32:03
【问题描述】:
假设我有一个数组和一个多维散列。我想递归地查看数组中的值是否作为哈希中的键存在。有没有比这样做更好的方法如下? (示例从 Perl MavenPerl Maven 编辑)。
请注意以下几点:
- 在下面的例子中,只有
FooBar和Mathematics存在于哈希%grades中; - 鉴于我的实际示例大约有 7 个级别,这篇文章的主要问题是如何找到一种更有效的方法来搜索一级、二级等;
- 请注意,我的想法是尽量收紧搜索。最好的办法是,如果我的数组中的所有元素都可以按顺序在哈希中找到(即让
@array=("FooBar","Mathematics")查看$myhash{"FooBar"}{"Mathematics"}的值;如果失败,请查看“FooBar”或“Mathematics”是否存在在哈希的第二级,即$myhash{"otherkeys"}{"Mathematics"}或$myhash{"otherkeys"}{"FooBar"})。
例子:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dump;
my @subjectsandnames=("FooBar","ThatBar","Mathematics","Biology","Physics");
my %grades;
$grades{"FooBar"}{Mathematics} = 12;
$grades{"FooBar"}{Literature} = 99;
$grades{"PetiBar"}{Literature} = 87;
$grades{"PetiBar"}{Mathematics} = 13;
$grades{"PetiBar"}{Art} = 93;
foreach my $name (sort keys %grades) {
my @possible = grep defined, map { $grades{$_}} @subjectsandnames; #sees matches at first level
dd @possible;
foreach my $subject (sort keys %{$grades{$name}}){
my @possible2 = grep defined, map { $grades{$name}{$_}} @subjectsandnames; #sees matches at second level
dd @possible2;
}
}
【问题讨论】: