当键和值都是数组引用时的 Perl 哈希

标签 perl hash reference

我遇到了数字对映射到其他数字对的问题。例如,(1,2)->(12,97)。有些对可能映射到多个其他对,所以我真正需要的是将一对映射到列表列表的能力,例如 (1,2)->((12,97),(4,1))。在一天结束时,我想分别处理每个值(即每个列表列表)。

在 Python 中,我可以简单地说:

key = ( x, y )
val = [ a, b ]
if (x,y) not in my_dict:
    my_dict[ (x,y) ] = []
my_dict[ (x,y) ].append( [a,b] )

但是,在 Perl 中,我必须对键和值使用 refs。所以我可以肯定地说:
$keyref = [ x1, y1 ]
$valref = [ a, b ]
%my_hash = { $keyref => $valref }

但是当另一对 (x2,y2) 出现时会发生什么?即使 x2==x1 和 y2==y1,$keyref=[x2,y2] 也会与之前生成的 keyref 不同,所以我看不到进行查找的方法。当然,我可以将 (x2,y2) 与每个取消引用的哈希键进行比较,但毕竟,上帝正是为了避免需要这样做而给了我们哈希表。

有 Perl 解决方案吗?

谢谢,

-W。

最佳答案

在 Perl 中,所有散列键都是字符串,或者在查找之前被“字符串化”。使用数组引用作为键通常是错误的方法。

使用“二维”哈希怎么样?

$hash{$x1}{$y1} = [ $a, $b ];
# or
%hash = ( $x1 => { $y1 => [ $a, $b ] } );


($x2,$y2)=($x1,$y1);
print @{$hash{$x2}{$y2}};   # will print $a and $b

关于当键和值都是数组引用时的 Perl 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899077/

相关文章:

perl - 如何使用 `\sort ...` ?

iphone - 是否可以用字符串和整数引用变量?

regex - 为什么 $1 在 hashref 赋值中指向与多个正则表达式匹配的相同值?

perl - 是否有一些关于 Perl 网络编程的最新教程?

javascript - 为所有哈希链接/调用的滚动位置添加一个自动偏移量

arrays - 使用哈希引用的最佳方法是什么?

c++ - const 引用可以分配一个 int 吗?

linux - 如何退出 perl 脚本中的 chroot?

Perl 返回 MSWin32 而我的笔记本电脑是 64 位

perl - 如何通过方法返回的引用将哈希元素插入到字符串中?