Perl中的哈希集合

7
考虑下面的代码:

考虑下面的代码:

$inFilesToCopy{$filename} = $filename;

我有一个哈希表,其中键和值都是文件名。我想避免使用额外的内存并且不重复存储文件名。
在Perl中是否有集合对象?

1
为什么不直接使用数组? - scrappedcola
因为我之后想要列出两个文件夹,并且只复制一个文件夹中的唯一文件到另一个文件夹中。 - Lukasz Madon
将字符串同时存储为键和值不会使用额外的内存。 - Gabe
3
'$_' 这个哈希键可能不是你想要的。单引号不会进行变量替换,因此 '$_' 是字面意义上的字符串 '$_' 而不是 $_ 的值。 - cftarnas
2个回答

11

Set::Object 的工作方式与您预期的相同:

use Set::Object qw(set);

my $files = set();
$files->insert($file);
my @files = $files->members();

您还可以进行集合运算:

my $a = set();
$a->insert(...);

my $b = set();
$b->insert(...);

my $only_in_a = $a - $b;
copy_to_b($only_in_a->members);

8
您可以考虑做以下事情:
$inFilesToCopy{$_} = 1;

接下来,您可以执行如下测试:

if($inFilesToCopy{$filename}) { ... }

您可以使用“keys%inFilesToCopy”获取文件列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接