如何在 Perl 中将数组(如以下示例中的元组)放入哈希中?
%h=();
@a=(1,1);
$h{@a}=1 or $h{\@a}=1??
我尝试使用数组引用,但它不起作用。我该如何让它发挥作用?我想通过进行散列(除其他外)来消除重复数据。
如何在 Perl 中将数组(如以下示例中的元组)放入哈希中?
%h=();
@a=(1,1);
$h{@a}=1 or $h{\@a}=1??
我尝试使用数组引用,但它不起作用。我该如何让它发挥作用?我想通过进行散列(除其他外)来消除重复数据。
常规散列只能具有字符串键,因此您需要为数组创建某种散列函数。一个简单的方法是简单地加入你的数组元素,例如
$h{join('-', @a)} = \@a; # A nice readable separator
$h{join($;, @a)} = \@a; # A less likely, configurable separator ("\034")
但是这种方法(使用哨兵值)要求您选择一个在键中找不到的字符。以下不受该问题的影响:
$h{pack('(j/a*)*', @a)} = \@a;
或者,查看Hash::MultiKey可以采用更复杂的密钥。
我尝试使用数组引用,但它不起作用
有趣的是,(新)Camel 书的第 361 页有一个段落标题: References Don't Work As Hash Keys
所以是的,你证明了骆驼书是对的。然后它继续告诉您如何使用 Tie::RefHash修复它。
我想你应该买这本书。
(顺便说一下,(1,1) 在 Python 中可能称为元组,但在 Perl 中称为列表)。
要使用哈希删除数组中的重复项:
my %hash;
@hash{@array} = @array;
my @unique = keys %hash;
或者,您可以使用map
创建哈希:
my %hash = map {$_ => 1} @array;