Программирование > Perl
Сортировка нескольких массивов
(1/1)
Error202:
Здрасте...
Есть 4 массива
@aa: (\'3\',\'2\',\'1\',\'4\')
@bb: (\'a\',\'b\',\'d\',\'c\')
@cc: (\'xx\',\'xx\',\'xx\',\'xx\')
@dd: (\'xx\',\'xx\',\'xx\',\'xx\')
Как можно их сортирнуть так, чтобы, допустим, при
$i == 1
Сортировалось все по первому массиву
Результат:
1,2,3,4
d,b,a,c
xx,xx...
$i == 2
Сортировалось все по второму массиву
Результат:
3,2,4,1
a,b,c,d
xx,xx...
и т.д. ?
APL:
боюсь что только вручную сортировать так можно... и руками же менять значения типа $aa[$n1] на $aa[$n2] и т.п.
Error202:
Жаль... Код с PHP перевожу... Там это одной процедуркой делается :(
ravshaniy:
вот два варианта, наверное есть еще, либо эти можно оптимизировать
--- Код: ---my (@aa, @bb, @cc, @dd);
@aa = (\'3\',\'2\',\'1\',\'4\');
@bb = (\'a\',\'b\',\'d\',\'c\') ;
@cc = (\'xx\',\'xx\',\'xx\',\'xx\');
@dd = (\'xx\',\'xx\',\'xx\',\'xx\') ;
sub sortByFirstArray (\\@\\@; ){
my ($a1, $a2) = @_;
my (%a, @a);
for $i (0..$#$a1){
$a{$$a1[$i]} = $$a2[$i];
}
$i=0;
for $k ( sort (keys %a) ){
$a[$i]=$a{$k};
$i++;
}
return @a;
}
print sortByFirstArray(@aa, @bb);
print "\\n", sortByFirstArray(@bb, @aa);
sub sortByFirstArray2 (\\@\\@; ){
my ($a1, $a2) = @_;
my (%a, $b, @a, @r);
for $i(0..$#$a1){
$b = $$a1[$i];
$a{$b} = $i;
}
@a = sort(@$a1);
for $i (0..$#a){
$b = $a[$i];
$b = $a{$b};
$r[$i]=$$a2[$b];
}
return @r;
}
print "\\n", sortByFirstArray2(@aa, @bb);
print "\\n", sortByFirstArray2(@bb, @aa);
--- Конец кода ---
Навигация
Перейти к полной версии