Nun, die einfachen - aber ineffizient - Weg wäre:
var result = _lstNeedToOrder.OrderBy(x => _lstOrdered.IndexOf(x));
Eine Alternative wäre, eine zu erarbeiten weit Weg, um den gewünschten Index eines Wertes zu erhalten. Wenn Ihre Werte immer im Bereich [1 ... n] liegen, können Sie diese "geordnete" Liste einfach als "Indexliste nach Wert" umkehren. An welcher Stelle Sie verwenden:
var result = _lstNeedToOrder.OrderBy(x => indexes[x]);
(wo indexes
einen zusätzlichen Wert zu Beginn für 0 haben würde, nur um die Dinge einfacher).
Alternativ können Sie einen Dictionary<int, int>
von Wert zu Index erstellen. Das wäre allgemeiner, da es einen sehr großen Bereich von Werten handhaben würde, ohne viel Speicher zu beanspruchen. Aber eine Wörterbuchsuche ist offensichtlich weniger effizient als eine Array- oder Listensuche.
var listToOrder = new List<int> { 1, 5, 6, 8 };
var orderedList = new List<int> { 13, 5, 11, 1, 4, 9, 2, 7, 12, 10, 3, 8, 6 };
Hey Jon, tut mir leid Wenn es eine dumme Frage ist, aber warum ist die erste ineffizient? –
@DimitarDimitrov: Es verwendet 'IndexOf', um den gewünschten Index für jeden Eintrag zu finden. Das ist eine O (n) -Operation in der Größe von '_lstOrdered', unnötig. –
@DimitarDimitrov vielleicht wegen der Verwendung von 'IndexOf'? –