简体   繁体   English

为什么此perl排序无法按预期进行?

[英]Why is this perl sorting not working as expected?

I first calculate the number of keys in array. 我首先计算数组中的键数。 When the number of "vectranet" items exceeds 9 the sorting does not work properly - "vectranet" is not first on the sorted list (I sort by hash value), here is my code, please help me I am going crazy :-) This form tells me that my post is mostly code and that I should provide more details, but I cannot write any more text I explained everything and I need to attach this huge array for you to see what my problem is :( 当“ vectranet”项的数量超过9时,排序将无法正常进行-“ vectranet”不在排序列表中的第一位(我按哈希值排序),这是我的代码,请帮助我,我会发疯:-)该表格告诉我,我的帖子主要是代码,我应该提供更多详细信息,但是我无法再写任何文字,我解释了所有内容,因此需要附加这个庞大的数组,以供您查看我的问题所在:(

@cprov=(
'vectranet.pl',
'airmax.pl',
'mm.pl',
'aduro.pl',
'lss.net.pl',
'multiplay.pl',
'vectranet.pl',
'vectranet.pl',
'vectranet.pl',
'vectranet.pl',
'vectranet.pl',
'inetia.pl',
'orange.pl',
'orange.pl',
'proneteus.pl',
'zicom.pl',
'zicom.pl',
'ac1-nat13.pl',
'sownet.pl',
't-mobile.pl',
't-mobile.pl',
't-mobile.pl',
'multiplay.pl',
'multiplay.pl',
'cyfrowypolsat.pl',
'plus.pl',
'vectranet.pl',
'vectranet.pl',
'centertel.pl',
'centertel.pl',
'centertel.pl',
'play-internet.pl',
'centertel.pl',
'plus.pl',
'cyfrowypolsat.pl',
'play-internet.pl',
'centertel.pl',
'satfilm.com.pl',
'odramedia.pl',
'netia.com.pl',
'espol.com.pl',
'netia.com.pl',
'tpnet.pl',
'tpnet.pl',
'tpnet.pl',
'tpnet.pl',
'vectranet.pl',
'vectranet.pl',
'tktelekom.pl',
'tktelekom.pl',
'sitel.net.pl',
'inter-sat.pl',
'mm.pl',
'mm.pl',
'chello.pl',
'chello.pl',
'chello.pl',
'chello.pl',
'chello.pl',
'net-system.pl',
'vectranet.pl',
'krosoft.pl',
'artcom.pl',
'play-internet.pl',
'protonet.pl',
'plus.pl',
'tpnet.pl'
);

my %pcounts;
$pcounts{$_}++ for @cprov;

for my $key ( sort { $pcounts{$b} cmp $pcounts{$a} } keys %pcounts ) {
    print "$key - $pcounts{$key}\n";
}

When comparing lexically, 10 comes before 2 just like ba comes before c . 用词法比较时, 102之前,就像bac之前。 You want to compare numerically, so use <=> instead of cmp . 您想进行数字比较,所以使用<=>而不是cmp

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM