Perl:比较两个哈希值,从一个哈希值中删除键

时间:2012-05-30 20:00:19

标签: perl

我正在尝试做什么:

将文件及其md5哈希值存储到哈希中,在添加或删除文件时更改哈希值。

到目前为止,我能够存储md5哈希值并在添加文件时更新哈希值。 但是我不知道如何删除已删除文件的密钥

我的方法现在是:

将数组转换为哈希值进行比较

my %files = map { $_ => 1 } @files;

检查它们是否相同

if (%files ~~  %hash).. same.. else... different

我不确定如何进一步实现这一点。这是我的想法:

删除不再具有文件的哈希中的密钥(伪代码)

Where exists $hash{$_} && !exists $files{$_} delete $hash{$_}

2 个答案:

答案 0 :(得分:4)

只需循环一个,然后检查是否存在并删除......

foreach my $k ( keys %file ) {
  delete $hash{$k} if exists $hash{$k};
}

此外,由于内部使用哈希来实现此目的,因此最好将undef分配给1。为简单而保留的原因。

my %files = map { $_ => undef } @files;

我不确定条件是否会使它更快或更慢 - 这可能无关紧要。

答案 1 :(得分:2)

您无需创建哈希来比较列表。看看List::Compare。特别是,get_unique()和get_complement()方法将标识仅出现在两个列表之一中的项目。