Сортировать числовой массив Perl - PullRequest
1 голос
/ 19 июля 2010

У меня есть массив, который выглядит так:

array[0]: 6 8
array[1]: 12 9 6
array[2]: 33 32 5
array[3]: 8 6

Я хочу отсортировать этот массив так, чтобы он выглядел так:

array[0]: 6 8
array[1]: 6 9 12
array[2]: 5 32 33
array[3]: 6 8

Я знаю, что могу отсортировать массив с помощью @newarray = sort {$a cmp $b} @array;, но мне также нужно отсортировать элементы в каждой строке. Как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 19 июля 2010

Предполагая, что у вас есть массив строк, и что все, что вам нужно, это отсортировать каждую строку, как если бы она была подмассивом чисел (но оставьте строку?):

#!/usr/bin/env perl
use strict;
use warnings;

my @array = ('6 8', '12 9 6', '33 32 5', '8 6');

foreach my $string (@array) {
    $string = split_sort($string);
}

sub split_sort {
    my $string = shift @_;
    my @internal_nums = split ' ', $string;
    @internal_nums = sort {$a <=> $b} @internal_nums;
    return join ' ', @internal_nums;
}

print "@array\n";
5 голосов
/ 19 июля 2010

Вы также можете решить это, используя карту

#!/usr/bin/env perl


my @numbers = (
    '6 8',
    '12 9 6',
    '33 32 5',
    '8 6',
);

my @sorted;
push (@sorted, map { join " ", sort { $a <=> $b }  (split / /, $_) } @numbers);


print "$_\n" for @sorted;

выходы:

6 8
6 9 12
5 32 33
6 8
5 голосов
/ 19 июля 2010

У вас есть список предметов, которые вы хотите преобразовать .Это идеальный кандидат на карту .Также обратите внимание на поведение по умолчанию split : оно работает на $_, разделяется на пробелы после удаления начальных пробелов.

...