-6ren">
gpt4 book ai didi

sorting - 按值对哈希进行排序

转载 作者:行者123 更新时间:2023-12-04 00:50:15 25 4
gpt4 key购买 nike

这不是我填充哈希的方式。为了便于阅读,这里是它的内容,键在一个固定长度的字符串上:

my %country_hash = (
"001 Sample Name New Zealand" => "NEW ZEALAND",
"002 Samp2 Nam2 Zimbabwe " => "ZIMBABWE",
"003 SSS NNN Australia " => "AUSTRALIA",
"004 John Sample Philippines" => "PHILIPPINES,
);

我想获取基于值的排序键。所以我的期望:

"003 SSS NNN       Australia  "
"001 Sample Name New Zealand"
"004 John Sample Philippines"
"002 Samp2 Nam2 Zimbabwe "

我做了什么:

foreach my $line( sort {$country_hash{$a} <=> $country_hash{$b} or $a cmp $b} keys %country_hash ){
print "$line\n";
}

还有;(我怀疑这会排序但无论如何)

my @sorted = sort { $country_hash{$a} <=> $country_hash{$b} } keys %country_hash;
foreach my $line(@sorted){
print "$line\n";
}

它们都没有正确排序。我希望有人能提供帮助。

最佳答案

如果您使用了 warnings , 你会被告知 <=>是错误的运算符(operator);它用于数字比较。使用 cmp用于字符串比较。引用sort .

use warnings;
use strict;

my %country_hash = (
"001 Sample Name New Zealand" => "NEW ZEALAND",
"002 Samp2 Nam2 Zimbabwe " => "ZIMBABWE",
"003 SSS NNN Australia " => "AUSTRALIA",
"004 John Sample Philippines" => "PHILIPPINES",
);

my @sorted = sort { $country_hash{$a} cmp $country_hash{$b} } keys %country_hash;
foreach my $line(@sorted){
print "$line\n";
}

这打印:

003 SSS NNN       Australia  
001 Sample Name New Zealand
004 John Sample Philippines
002 Samp2 Nam2 Zimbabwe

这也有效(没有额外的数组):

foreach my $line (sort {$country_hash{$a} cmp $country_hash{$b}} keys %country_hash) {
print "$line\n";
}

关于sorting - 按值对哈希进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67233361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com