我有一个散列。哈希键是一个长字符串,"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;
我还为所有可能匹配的值设置了一个单独的数组
如果它不是一个巨大的排序,一个简单的解决方案是直接使用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;
使用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;