сортировка строк на основе символа, содержащегося в строке - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть текстовый файл, содержащий список строк, которые я хочу отсортировать на основе первого числа, содержащегося в строке.Если строка не содержит числа, игнорируйте.

Например:

string1
string2
another_string1
another_string2

Я хочу отсортировать вышеприведенное в:

string1
another_string1
string2
another_string2

Ответы [ 2 ]

4 голосов
/ 22 апреля 2011
@strings = qw/
    string1
    string2
    another_string1
    another_string2
/;
my @sorted_strings =
    map { $_->[0] }
    sort { $a->[1] <=> $b->[1] }
    map { /(\d+)/ ? [ $_, $1 ] : () }
    @strings;
1 голос
/ 22 апреля 2011
#!/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 , но я надеюсь, что это поможет.По сути: я использую хеш %h, где ключи - это числа (совпадают с конца ваших строк), а значения - это массивы, содержащие строки, оканчивающиеся этим числом.После создания хэша я распечатываю его содержимое, сортируя ключи (то есть числа в конце ваших строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...