perl 使用值进行哈希排序

ivqmmu1c  于 2023-11-22  发布在  Perl
关注(0)|答案(2)|浏览(264)

我有一个散列如下所示。我想在排序(升序)的基础上valueskeys列表。
如果两个不同的键有相同的值,那么它应该先打印keys,其中keys较小。
让我展示一下我的例子中出现的问题:

#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper;

my %hash = (
          '11' => 1,
          '315' => 4,
          '27' => 3,
          '60' => 4,
          '8' => 3,
          '4' => 2
);

my @keys = sort { $hash{$a} <=> $hash{$b} } keys(%hash);
print Dumper(\@keys);

字符串
电流输出:

$VAR1 = [
          '11',
          '4',
          '27',
          '8',
          '315',
          '60'
        ];


我想打印如下:

$VAR1 = [
          '11',
          '4',
          '8',
          '27',
          '60',
          '315'
        ];


因为60的值是4315的值也是4。我想先打印60,然后再打印315,因为60小于315(我的意思是基于key的值)。假设这可以用Tie::SortHash来完成(不确定)?

ryevplcw

ryevplcw1#

将排序更改为先按数值排序,然后按键排序:

my @keys = sort { 
    $hash{$a} <=> $hash{$b}
        or
    $a <=> $b
} keys(%hash);

字符串
输出量:

$VAR1 = [
          '11',
          '4',
          8,
          27,
          60,
          315
        ];


参考perlfaq4:如何对散列进行排序(可选按值而不是键)?
在命令行中,您可以使用以下命令查找常见问题:

perldoc -q sort

nwo49xxi

nwo49xxi2#

use Sort::Key::Multi qw( uukeysort );

my @keys =
   uukeysort { $hash{ $_ }, $_ }
      keys( %hash );

字符串

相关问题