Сортировка одного массива по сравнению с другим, а затем сортировка в этом массиве - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть два массива, которые нужно отсортировать.

Например, у меня может быть следующее:

@aa = (1, 4, 5, 1, 2); @bb = (3, 1, 2, 2, 3);

Следующий скрипт сортирует элементыв @aa, а затем переставляет @bb следующим образом:

my @idx = sort { $aa[$a] cmp $aa[$b] } 0 .. $#aa;

@aa = @aa[@idx];

@bb = @bb[@idx];

Это оставляет@bb as (3, 2, 3, 1, 2).

Однако теперь я хочу переставить элементы в @bb, чтобы те, которые соответствуют одинаковым значениям в @aa, находились в порядке возрастания.Например, первые 3 и 2 в @bb, оба соответствуют 1 в @aa, и поэтому я хочу иметь возможность поменять их местами, поэтому @bb = (2, 3, 3, 1, 2).

Есть ли простойспособ сделать это.Я думал о новом массиве, в котором я умножаю каждую пару элементов в @aa и @bb вместе, а затем использую это, но не могу понять, как это тоже поможет.

1 Ответ

0 голосов
/ 26 декабря 2018

Если вы сортируете числа, вы должны использовать <=>, а не cmp.

Мне кажется, что вы просите изменить сортировку для сортировки по значениям bb, когда значение aaравны.Это просто:

my @idx = sort {
    $aa[$a] <=> $aa[$b] ||
    $bb[$a] <=> $bb[$b]
} 0 .. $#aa;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...