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 に答える