perl哈希数据类型列表顺序

时间:2016-09-18 19:57:35

标签: arrays perl sorting hash

#!/usr/bin/perl
%mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3");

print("key-val\n");
for $x (keys(%mylist))
{
    print ("$x:$mylist{$x}\n");
}

print("\nvals\n");
for $x (values(%mylist))
{
    print ("$x\n");
}

当我编译上面的代码时,我得到以下输出

key-val
svrcmb:10.0.0.2
svrkdy:10.0.0.3
svrmlb:10.0.0.1

vals
10.0.0.2
10.0.0.3
10.0.0.1

但我的预期输出是

 key-val
 svrmlb:10.0.0.1
 svrcmb:10.0.0.2
 svrkdy:10.0.0.3

 vals
 10.0.0.1
 10.0.0.2
 10.0.0.3

我的问题是为什么它被排序,我没有对键或值应用排序。这是哈希的特征吗?早些时候我曾尝试对其他几个哈希阵列进行排序,但他们并不喜欢这样。请帮我理解。

2 个答案:

答案 0 :(得分:3)

正如perldata所说:

  

哈希是由关联字符串键索引的标量值的无序集合。

答案 1 :(得分:0)

我可以想到两个快速解决方案: 1-将密钥存储在一个数组中; 2-使用Tie :: IxHash; (默认情况下通常不安装)

%mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3");
@mylist=("svrmlb","svrcmb","svrkdy");

print("key-val\n");
for $x (@mylist)
{
    print ("$x:$mylist{$x}\n");
}

print("\nvals\n");
for $x (@mylist)
{
    print ("$mylist{$x}\n");
}

使用Tie :: IxHash

use Tie::IxHash;
%mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3");
tie %mylist, 'Tie::IxHash';

print("key-val\n");
for $x (keys(%mylist))
{
    print ("$x:$mylist{$x}\n");
}

print("\nvals\n");
for $x (values(%mylist))
{
    print ("$x\n");
}