Mon objectif est: Compte tenu d'une liste d'entrées, et un ordre souhaité, réorganiser la liste des entrées en fonction de cette commande. La liste sera très grande, donc l'efficacité de l'espace est importante.C# Étant donné un ordre souhaité besoin d'un réordonnancement de la liste efficace de l'espace ou de tri
Ex:
List<Entry> data = ReadDataFromSomeWhere(); // data => [a, b, c];
List<int> ordering = RandomPermutation(data.Count); // ordering => [2, 1, 3];
data.ReOrderBy(ordering); // data => [b, a, c];
Je peux me tromper, mais il semble que la solution la plus simple et efficace de l'espace est de trier/orderby les données par la commande . ou plus généralement:
Étant donné deux listes: A, B existe-t-il un moyen de trier A par B? La fonctionnalité serait essentiellement la même que: Array.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[])
Une méthodologie qui vient à l'esprit est de créer un nouveau type de données qui est composé de A et B, ie. Paire, puis trier par les valeurs B:
List<T> A;
List<T> B;
Assert(A.Count == B.Count);
var C = A.Select((a,idx) => new Pair<T,T>(B[idx],a)).OrderBy(c => c.First);
A = C.Select(x => x.Second).ToList();
Cependant, je voudrais que ce soit aussi efficace de l'espace que possible (à la fois sélectionner son et la tolist() appelle Je devine que coûtent cher), donc un un tri largement en place est nécessaire. A cette fin, existe-t-il un moyen d'écrire un comparateur pour A.Sort(), qui fait référence à B?
Reflector, profiler sont vos amis. –