2

我有一个哈希。哈希键是一个长字符串“str_3432_123_A12_C02_xy_ut”,我想按格式为 A12_C02 的字符串子集对键进行排序。

我假设字符串的任何其他部分都不会匹配正则表达式,但字符串内的位置可能会有所不同。

 [A-Za-z][0-9]{2}_[A-Za-z][0-9]{2}

按键对我的哈希进行排序:

  my @sorted = sort keys %myhash;

对于所有可能匹配的值,我也有一个单独的数组。

4

2 回答 2

4

至少如果它不是一个巨大的排序,一个简单的解决方案是sort直接使用:

my $re = /([a-z][0-9]{2}_[a-z][0-9]{2})/i;
my @sorted = sort {
        ($a) = $a =~ $re;
        ($b) = $b =~ $re;
        $a cmp $b;
    }
    keys %hash;
于 2013-05-20T23:02:49.743 回答
3

使用map和的组合sort提取要用于排序和恢复完成后的整个密钥的字符串部分,例如:

my @sorted = 
    map { $_->[0] } 
    sort { $a->[1] cmp $b->[1] } 
    map { m/([A-Za-z][0-9]{2}_[A-Za-z][0-9]{2})/ && [$_, $1] } 
    keys %myhash;
于 2013-05-20T22:50:24.130 回答