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

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

27
задан Loai Nagati 26 December 2009 в 20:13
поделиться

2 ответа

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

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
63
ответ дан 28 November 2019 в 04:38
поделиться

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

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

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

.
1
ответ дан 28 November 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: