Ana*_*log 0 sorting perl perl-data-structures
我在尝试根据散列中的值对哈希的arrayref进行排序时遇到了麻烦,数据结构如下所示:
my %usera = (name => 'tom',
weight=> 10);
my %userb = (name => 'harry',
weight=> 1);
my %userc = (name => 'peter',
weight=> 5);
my $users = [];
push(@$users,\%usera,\%userb,\%userc);
Run Code Online (Sandbox Code Playgroud)
我想按重量降序对结果进行排序,所以它会按照"汤姆,彼得,哈利"的顺序排列,但我没有太多运气.我试过了:
for my $user (sort{ $users->[$a]{'Weight'} <=> $users->[$b]{'Weight'} } @$users){
.....
}
Run Code Online (Sandbox Code Playgroud)
我认为可能有用,但没有爱.
任何的想法?
TIA!
如果要排序@$users,则流水线数据来自元素而非下标.因此,索引$users->[$x]是完全没必要的,更不用说错了.如果您已经使用过warnings,您会看到将Use of reference "HASH(0x2c201e0)" as array index at ...您的排序更改为:
use warnings;
foreach my $user (sort { $b->{weight} <=> $a->{weight} } @$users ) {
...
}
Run Code Online (Sandbox Code Playgroud)
此外,正如其他地方所提到的,Perl哈希区分大小写.$h->{Weight}并且$h->{weight}是两个不同的哈希槽.