在大型Perl哈希中,如何提取特定键的子集?

Jan*_*ane 4 perl hash key

我有一个大的哈希,并有一个我想要提取值的键的子集,而不必迭代哈希查找每个键(因为我认为这将花费太长时间).

我想知道我是否可以用grep一个密钥子集来获取文件?例如,有些东西:

 my @value = grep { defined $hash{$_}{subsetofkeysfile} } ...;
Run Code Online (Sandbox Code Playgroud)

FMc*_*FMc 7

使用哈希切片:

my %hash = (foo => 1, bar => 2, fubb => 3);
my @subset_of_keys = qw(foo fubb);
my @subset_of_values = @hash{@subset_of_keys};  # (1, 3)
Run Code Online (Sandbox Code Playgroud)

两点澄清.(1)您永远不需要遍历查找特定键或值的哈希.您只需向哈希提供一个密钥,然后返回相应的值 - 或者,如果是哈希切片,则提供密钥列表并返回值列表.(2)defined和之间存在差异exists.如果您只关心散列是否包含特定键,exists则是正确的测试.