根据字符串中包含的字符对字符串进行排序

时间:2011-04-22 07:57:17

标签: perl

我有一个文本文件,其中包含我想根据字符串中包含的第一个数字排序的字符串列表。如果字符串不包含数字,则忽略。

例如:

string1
string2
another_string1
another_string2

我想将上述内容排序为:

string1
another_string1
string2
another_string2

2 个答案:

答案 0 :(得分:4)

@strings = qw/
    string1
    string2
    another_string1
    another_string2
/;
my @sorted_strings =
    map { $_->[0] }
    sort { $a->[1] <=> $b->[1] }
    map { /(\d+)/ ? [ $_, $1 ] : () }
    @strings;

答案 1 :(得分:1)

#!/usr/bin/perl

use strict;

my @strings = qw/
    string1
    string2
    another_string1
    another_string2
/;

my %h;

foreach my $string (@strings) {
    if ($string =~ /(\d+)/) {
        push @{$h{$1}}, $string;
    } else {
        print "cannot classify $string : skipping\n";
    }
}

foreach my $key (sort { $a <=> $b } keys %h) {
    foreach my $s (@{$h{$key}}) {
        print $s . "\n";
    }
}

ysth's solution更详细,但我希望它有所帮助。基本上:我使用散列%h,其中键是数字(从字符串的末尾匹配),值是包含以该数字结尾的字符串的数组。在构造了哈希之后,我打印其内容排序键(即字符串末尾的数字)。