Автор Тема: Сортировка нескольких массивов  (Прочитано 3679 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Сортировка нескольких массивов
« : 19 Ноября 2008, 16:06:19 »
Здрасте...

Есть 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

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 344
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.aerozone.ru
Сортировка нескольких массивов
« Ответ #1 : 19 Ноября 2008, 16:54:58 »
боюсь что только вручную сортировать так можно... и руками же менять значения типа $aa[$n1] на $aa[$n2] и т.п.

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Сортировка нескольких массивов
« Ответ #2 : 19 Ноября 2008, 16:58:28 »
Жаль... Код с PHP перевожу... Там это одной процедуркой делается :(
Космическая игрушка

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка нескольких массивов
« Ответ #3 : 19 Ноября 2008, 23:50:17 »
вот два варианта, наверное есть еще, либо эти можно оптимизировать
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);
убили кенни, сволочи

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28