【发布时间】:2011-12-15 11:48:21
【问题描述】:
我遇到了一个问题,即成对的数字映射到其他成对的数字。例如,(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.
【问题讨论】:
-
您不能使用引用作为键。 (至少不使用 tied 哈希)