Сортировка массива, связанного с другим массивом
Если у меня есть два массива, x и y, где y – значение десятков каждого элемента из x. Теперь я хочу сортировать y. Но порядок y будет отличаться от x. Итак, после сортировки, какой элемент в y был связан, например, x [0], я не могу сказать. Я хочу, чтобы «двойная сортировка» могла быть. Ваша помощь бесконечно ценится!
- Как удалить повторяющиеся элементы из массива в Perl?
- Почему scanf () нуждается в & operator (address-of) в некоторых случаях, а не в других?
- Словарь в Swift с Mutable Array как значение работает очень медленно? Как оптимизировать или построить правильно?
- Сравнение двух байтовых массивов в .NET.
- Что полезно в отношении параметра reference-to-array?
- Многомерные массивы в Swift
- Является ли Java 7 с помощью Tim Sort для массива методов. Сорт?
- Структуры данных .NET: ArrayList, List, HashTable, Словарь, SortedList, SortedDictionary - Скорость, память и когда использовать их?
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
Если y всегда является десятком значений x, y, вероятно, не должно существовать. Вероятно, вы должны просто вычислить его значение непосредственно из x, когда это необходимо.
В общем случае сортировка параллельных массивов возможна только (без ручного каротажа алгоритма сортировки), когда алгоритм сортировки принимает пользовательскую функцию «своп», которую вы можете реализовать с точки зрения замены элементов в обоих массивах одновременно. std :: sort в C ++ и qsort в C не позволяют этого.
Также в общем случае рассмотрим один массив, в котором элемент представляет собой пару элементов, а не параллельный массив для каждого элемента. Это упрощает использование «стандартных» алгоритмов.
Как насчет?
var selectedArr = new int[] { 1, 3, 5, 7, 9 }; var unorderArr = new int[] { 9, 7, 5, 3, 1 }; var orderedArr = unorderArr.OrderBy(o => selectedArr.IndexOf(o));