首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

关于hash的key顺序

2012-03-02 
求助关于hash的key顺序很久以前写的一个程序,今天回头看的时候发现结果貌似有问题,可是我输出结果试一下发

求助关于hash的key顺序
很久以前写的一个程序,今天回头看的时候发现结果貌似有问题,可是我输出结果试一下发现是对的,不知道发生了什么,大家帮忙看看吧。

我要做的是把一个hash(%aa_comp)里面的数据(keys是英文字母,values是英文字母的出现次数)归类到另外一个一个hash(%property)里面去,A,C,S,G,T归类为tiny,A,C归类为small等等,然后把结果都输出到excel上去。

我把%property的keys全放到一个@property里面去,然后输出,现在问题是,我印象里面%property的keys是无序的吧,我没有用sort指令,所以输入到@property里面的应该是乱序,继而输出到excel里面我想应该是变乱了。

我尝试输出@property结果一看,的确是乱的,Aliphatic,Hphilic,Tiny,Hphobic,Nonpolar,Polar,Acidic,Small
Neutral,Aromatic,Basic,Charged。
可是!可是这个顺序正好和我写在excel里面的眉头顺序一样,aliphatic...charged,所以我感到很奇怪,应该不是巧合吧,我重复了几次,都得到了同样的顺序,大家能告诉我为什么我能得到这样的顺序呢。是不是hash的keys输出是乱序的,但是会永远遵循第一次的乱序的那种顺序?

谢谢!!

my %aa_comp;
my %property;

$property{Tiny} = $aa_comp{A}+$aa_comp{C}+$aa_comp{S}+$aa_comp{G}+$aa_comp{T};
$property{Small} = $aa_comp{A}+$aa_comp{C};
$property{Aliphatic} = $aa_comp{I}+$aa_comp{L}+$aa_comp{V};
$property{Aromatic} = $aa_comp{H}+$aa_comp{F}+$aa_comp{W}+$aa_comp{Y};
$property{Nonpolar} = $aa_comp{A}+$aa_comp{C}+;
$property{Polar} = $aa_comp{Q}+$aa_comp{H}+$aa_comp{K}+$aa_comp{S}+$aa_comp{T};
$property{Charged} = $aa_comp{H}+$aa_comp{R}+$aa_comp{D}+$aa_comp{E}+$aa_comp{K};
$property{Basic} = $aa_comp{R}+$aa_comp{H}+$aa_comp{K};
$property{Acidic} = $aa_comp{D}+$aa_comp{E};
$property{Neutral} = $aa_comp{G}+$aa_comp{Q}+$aa_comp{H}+$aa_comp{S}+$aa_comp{T};
$property{Hphilic} = $aa_comp{D}+$aa_comp{E}+$aa_comp{K}+$aa_comp{N}+$aa_comp{Q}+$aa_comp{R};
$property{Hphobic} = $aa_comp{M}+$aa_comp{V}+$aa_comp{W};

my @property = keys %property;

foreach my $roww(26..37){
$sheet->Cells($roww, 2)->{'Value'} = $property{$property[$roww-26]};
}

[解决办法]
乱是有规律的,不是彻底的乱七八糟
对相同的数据,哈希的顺序应该是固定的
建议楼主看些哈希表的相关资料,就清楚了
[解决办法]
是的,hash的keys输出是乱序的,但是会永远遵循第一次的乱序的那种顺序,也就是说它每次输出都是同一顺序。
[解决办法]
别相信什么第一次第二次之类的东西。
只要记住hash是无序的就行了。
[解决办法]
楼主的理解是对的,perl对hash的排列是依照内部的演算法找出最佳化的排列,既然算法和输入都一样,自然每次输出都是一样的。

热点排行