在Perl中,如何使用自定义排序对哈希键进行排序?

Eri*_*sum 5 sorting perl hash foreach

我正在尝试对文件的哈希工作,并且工作必须按特定顺序完成.大多数人会说列表可以像这样订购:

for my $k (sort keys %my_hash)
{
    print "$k=>$my_hash{$k}, ";
}
Run Code Online (Sandbox Code Playgroud)

不过,我需要非字母顺序,其实按键与一个字开始,然后_和他们去GdigitsL任何的M,P,R,T or D(例如word_G.txt,word_2.txt,..., word_P.txt).有没有办法按自定义顺序排序?

Sin*_*nür 13

有没有办法按自定义顺序排序?

是.见排序.

例如:

#!/usr/bin/env perl

use warnings; use strict;

my @order = qw(G 1 2 3 L M P R T D);

my %order_map = map { $order[$_] => $_ } 0 .. $#order;

my $pat = join '|', @order;

my @input = qw(word_P.txt word_2.txt word_G.txt);

my @sorted = sort {
    my ($x, $y) = map /^word_($pat)[.]txt\z/, $a, $b;
    $order_map{$x} <=> $order_map{$y}
} @input;

print "@sorted\n";
Run Code Online (Sandbox Code Playgroud)