#!/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
我的问题是为什么它被排序,我没有对键或值应用排序。这是哈希的特征吗?早些时候我曾尝试对其他几个哈希阵列进行排序,但他们并不喜欢这样。请帮我理解。
答案 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");
}
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");
}