2

私がやろうとしていること:

ファイルとそのmd5ハッシュ値をハッシュに保存し、ファイルが追加または削除されたときにハッシュを変更します。

これまでのところ、md5ハッシュを保存し、ファイルが追加されたときにハッシュを更新することができます。ただし、削除されたファイルのキーを削除する方法がわかりません

今の私のアプローチは次のとおりです。

配列をハッシュに変換して比較する

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

それらが同じであるかどうかを確認してください

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

これをさらに実装する方法がわかりません。これが私の考えです。

ファイルがなくなったハッシュ内のキーを削除します(擬似コード)

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

2 に答える 2

4

1つをループし、存在するかどうかを確認して削除します...

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

また、この目的でハッシュを使用する場合は内部構造のため、割り当てるundefよりも割り当てる方が適切です1。単純化のために差し控えられた理由。

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

条件がそれを速くするか遅くするかはわかりません-おそらく問題ではありません。

于 2012-05-30T20:14:59.870 に答える
2

リストを比較するためにハッシュを作成する必要はありません。List::Compareをご覧ください。特に、get_unique()メソッドとget_complement()メソッドは、2つのリストのいずれかにのみ表示されるアイテムを識別します。

于 2012-05-30T20:12:09.793 に答える