+ -
当前位置:首页 → 问答吧 → 难道是随机的吗?

难道是随机的吗?

时间:2011-07-12

来源:互联网

my @key=qw/one two three/;
my @val=(1..3);
@key_val{@key}=@val;

print join $",values %key_val;

运行结果:3 1 2

我以为是: 1 2 3

可能对Perl的基础部分没有了解透切,求指点。

作者: mysqllog   发布时间: 2011-07-12

只保证 values 和 keys 是一样的,最终的顺序是由 hash 函数和 hash 的内部实现决定的。如果编译时进行相应的设置每个线程间的顺序都可能不一样

作者: zhlong8   发布时间: 2011-07-12

回复 zhlong8


    还得多看小骆驼几遍

多谢 版主指点

一旦进行了键/值的 关联,这种“随机” 性就是确定了吧,也就是说就算是在多线程环境中,也不会 乱来?!

作者: mysqllog   发布时间: 2011-07-12

hash 本来就不保证顺序。

作者: flw   发布时间: 2011-07-12



QUOTE:
回复  zhlong8


    还得多看小骆驼几遍

多谢 版主指点

一旦进行了键/值的 关联,这种“随机”  ...
mysqllog 发表于 2011-07-12 22:11




    Perl 多线程并不真正共享内存,所以多线程下还是和上面说的一样线程间即使是同样的数据顺序也可能不同。因为每个线程初始化时会给 hash 函数设置一个混淆用的随机参数。

作者: zhlong8   发布时间: 2011-07-12