创建一个以数组为键的Perl哈希

Qia*_* Li 5 perl

如何将数组(如下例中的元组)放入Perl中的哈希?

%h=();
@a=(1,1);
$h{@a}=1 or $h{\@a}=1??
Run Code Online (Sandbox Code Playgroud)

我尝试使用数组引用,但它不起作用.我该如何使它工作?我希望通过散列(以及其他方面)进行基本上重复删除.

Pau*_*xon 10

常规哈希只能有字符串键,因此您需要为数组创建某种哈希函数.一种简单的方法是简单地加入你的数组元素,例如

$h{join('-', @a)} = \@a;  # A nice readable separator
$h{join($;, @a)} = \@a;   # A less likely, configurable separator ("\034")
Run Code Online (Sandbox Code Playgroud)

但是这种方法(使用哨兵值)要求你选择一个在钥匙中找不到的角色.以下不会遇到这个问题:

$h{pack('(j/a*)*', @a)} = \@a;
Run Code Online (Sandbox Code Playgroud)

或者,查看Hash :: MultiKey,它可以使用更复杂的密钥.