当键和值都是数组引用时,Perl哈希
发布时间:2020-12-15 21:46:04 所属栏目:大数据 来源:网络整理
导读:我有一个问题,其中数字对映射到其他数字对.例如,(1,2) – (12,97).有些对可以映射到多个其他对,所以我真正需要的是能够将一对映射到列表中,如(1,2) – ((12,97),(4,1)).在一天结束时,我想分别处理每个值(即每个列表列表). 在Python中,我可以通过简单地说: k
我有一个问题,其中数字对映射到其他数字对.例如,(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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |