[Moscow.pm] Вставка в спиоск в определенное место
Alexander Lourier
aml на rulezz.ru
Пн Дек 7 05:16:11 PST 2009
В письме Monday 07 December 2009 16:00:43 Denis Evdokimov написал:
> Как-то так?
>
> #!/usr/bin/perl
> use strict;
> use warnings;
>
> use Data::Dumper;
>
> my $sort_index2 = 0;
>
> my @a = (
> {
> name => 'a',
> sort => 0,
> sort_index2 => ++$sort_index2,
> },
> {
> name => 'b',
> sort => 4,
> sort_index2 => ++$sort_index2,
> },
> {
> name => 'c',
> sort => 10,
> sort_index2 => ++$sort_index2,
> },
> );
>
> push @a,
> {
> name => 'd',
> sort => 0,
> sort_index2 => ++$sort_index2,
> };
>
> print Dumper \@a;
> @a = sort my_sort @a;
> print Dumper \@a;
>
>
> sub my_sort
> {
> my $answer;
> if ( $a->{sort} > $b->{sort} )
> {
> $answer = 1;
> }
> elsif ( $a->{sort} < $b->{sort} )
> {
> $answer = -1;
> }
> else
> {
> $answer = 0;
> }
>
> if ( $answer == 0 )
> {
> if ( $a->{sort_index2} > $b->{sort_index2} )
> {
> $answer = -1;
> }
> else
> {
> $answer = 1;
> }
> }
> return $answer;
> }
Или то же самое короче:
sort {
($a->{sort} <=> $b->{sort}) ||
($a->{sort_index2} <=> $b->{sort_index2})
} @a;
--
Alexander Lourier, http://aml.rulezz.ru/
Подробная информация о списке рассылки Moscow-pm