Подтвердить что ты не робот

Сортировка массива, связанного с другим массивом

Если у меня есть два массива, x и y, где y - значение десятков каждого элемента из x. Теперь я хочу сортировать y. Но порядок y будет отличаться от x. Итак, после сортировки, какой элемент в y был связан, например, x [0], я не могу сказать. Я хочу, чтобы "двойная сортировка" могла быть. Ваша помощь бесконечно ценится!

4b9b3361

Ответ 1

Array.Sort имеет перегрузку, которая принимает два массива; один для ключей и один для элементов. Элементы и сортируются в соответствии с массивом keys:

int[] keys = { 1, 4, 3, 2, 5 };
string[] items = { "abc", "def", "ghi", "jkl", "mno" };
Array.Sort(keys, items);
foreach (int key in keys) {
    Console.WriteLine(key); // 1, 2, 3, 4, 5
}
foreach (string item in items) {
    Console.WriteLine(item); // abc, jkl, ghi, def, mno
}

Итак, в вашем случае это звучит так, как вы хотите:

Array.Sort(y,x); // or Sort(x,y); - it isn't  100% clear

Ответ 2

Если y всегда является десятком значений x, y, вероятно, не должно существовать - вы должны, вероятно, просто вычислить его значение непосредственно из x при необходимости.

В общем случае сортировка параллельных массивов возможна только (без ручного каротажа алгоритма сортировки), когда алгоритм сортировки принимает пользовательскую функцию "своп", которую вы можете реализовать в терминах замены элементов в обоих массивах одновременно. std:: sort в С++ и qsort в C не позволяют этого.

Также в общем случае рассмотрим один массив, в котором элемент представляет собой пару элементов, а не параллельный массив для каждого элемента. Это упрощает использование "стандартных" алгоритмов.