История изменений
Исправление zaz, (текущая версия) :
У меня получилось чтото в таком духе - не знаю насколько оно правильно работает и лутчше/хуже того что есть у вас. Но возможно будет полезно ...
#!/usr/bin/perl
use Data::Dumper;
my @meters = (
{seq=>3, name=>"Їдальня"},
{seq=>5, name=>"Контора"},
{seq=>6, name=>"Госпдвір"},
{seq=>4, name=>"Склад"},
{seq=>2, name=>"Госпдвір"},
);
sub metOrder {
my $items = shift;
my %minSeq;
foreach $i (@$items) {
if((! $minseq{$i->{name}}) or ($minseq{$i->{name}} > $i->{seq})) {
$minSeq{$i->{name}} = $i->{seq}
};
}
return sort {
($minSeq{$a->{name}} != $minSeq{$b->{name}})
?($minSeq{$a->{name}} <=> $minSeq{$b->{name}})
:($a->{seq} <=> $b->{seq})
} @$items;
}
my @sorted = metOrder( \@meters );
print Dumper( \@sorted );
Исходная версия zaz, :
У меня получилось чтото в таком духе - не знаю насколько оно правильно работает и лутчше/хуже того что есть у вас. Но возможно будет полезно ...
#!/usr/bin/perl
use Data::Dumper;
my @meters = (
{seq=>3, name=>"Їдальня"},
{seq=>5, name=>"Контора"},
{seq=>6, name=>"Госпдвір"},
{seq=>4, name=>"Склад"},
{seq=>2, name=>"Госпдвір"},
);
sub metOrder {
my $items = shift;
my %minSeq;
foreach $i (@$items) {
if((! $minseq{$i->{name}}) or ($minseq{$i->{name}} > $i->{seq})) {
$minSeq{$i->{name}} = $i->{seq}
};
}
return sort {
($minSeq{$a->{name}} == $minSeq{$b->{name}})
?($minSeq{$a->{name}} <=> $minSeq{$b->{name}})
:($a->{seq} <=> $b->{seq})
} @$items;
}
my @sorted = metOrder( \@meters );
print Dumper( \@sorted );