小编wch*_*hlm的帖子

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

我有一个问题,其中数字对映射到其他数字对.例如,(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.

perl hash reference

5
推荐指数
2
解决办法
169
查看次数

如何在git仓库进行本地更新时显示日期?

例如:

  • 如何创建HEAD @ {2}时如何显示?
  • 给定提交的SHA1,如何显示它被拉入当前仓库的日期,而不是(或除了)其提交日期?

我认为会有一个git reflog选择,但据我所知,没有.

git reflog

5
推荐指数
1
解决办法
279
查看次数

标准输出的行缓冲在 MINGW/MSYS Python 2.7.3 上失败

这个简单的脚本说明了这个问题:

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。

python mingw stdout msys output-buffering

4
推荐指数
1
解决办法
1175
查看次数

标签 统计

git ×1

hash ×1

mingw ×1

msys ×1

output-buffering ×1

perl ×1

python ×1

reference ×1

reflog ×1

stdout ×1