我有一个问题,其中数字对映射到其他数字对.例如,(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] )
Run Code Online (Sandbox Code Playgroud)
但是,在Perl中,我必须使用refs作为键和值.所以我当然可以说:
$keyref = [ x1, y1 ]
$valref = [ a, b ]
%my_hash = { $keyref => $valref }
Run Code Online (Sandbox Code Playgroud)
但是当另一对(x2,y2)出现时会发生什么?即使x2 == x1和y2 == y1,$ keyref = [x2,y2]也会与之前生成的keyref不同,所以我看不到进行查找的方法.当然,我可以将(x2,y2)与每个解除引用的哈希键进行比较,但毕竟,上帝精确地给了我们哈希表以避免需要这样做.
有Perl解决方案吗?
谢谢,
-W.
例如:
我认为会有一个git reflog选择,但据我所知,没有.
这个简单的脚本说明了这个问题:
import time, os, sys
sys.stdout = os.fdopen( sys.stdout.fileno(), 'w', 1 ) # line-buffer stdout
print 'before sleep'
time.sleep( 10 )
print 'after sleep'
Run Code Online (Sandbox Code Playgroud)
如果行缓冲成功,则两行打印之间将有 10 秒的间隙。如果没有,则在 10 秒暂停后(Python 启动后),两行实际上会同时出现;也就是说,当程序退出时会打印这些行。
在 Linux 上,如果包含“sys.stdout”行,我会看到文件和屏幕的行缓冲行为。如果没有该行,我会在屏幕上看到行缓冲行为,但不会在文件中看到行缓冲行为。这是预料之中的。
在 MSYS/MINGW 环境中,如果我省略“sys.stdout”行,我会看到与 Linux 相同的行为:行缓冲到屏幕,但不缓冲到文件。
奇怪的是,对于“sys.stdout”行,我没有看到屏幕或文件的行缓冲。我希望两者都能看到它,就像在 Linux 中一样。
谁能建议一个解决方法?
这里有更多信息:
uname -a MINGW32_NT-6.0 FOO 1.0.11(0.46/3/2) 2009-05-23 19:33 i686 Msys
谢谢,-W。