Wie würde ich in absteigender Reihenfolge sortieren, eine List<Tuple<int, int>>
mit dem ersten Element des Tupel als der Wert, der die Reihenfolge bestimmt? Es muss an Ort und Stelle sein und ich weiß nur, wie es mit LINQ funktioniert, das eine neue Liste zurückgibt.Sortierliste <Tupel <int, int>> in-place
Antwort
Sie haben soeben einen IComparer<Tuple<int, int>>
oder eine Comparison<Tuple<int, int>>
zum List<T>.Sort
Methode zur Verfügung stellen müssen. Letzteres ist wahrscheinlich einfacher Inline angeben:
list.Sort((x, y) => y.Item1.CompareTo(x.Item1));
Wenn Sie durch den ersten Wert bestellen möchten und dann den zweiten Wert, wird es ein bisschen schwieriger, aber immer noch machbar. Zum Beispiel:
list.Sort((x, y) => {
int result = y.Item1.CompareTo(x.Item1));
return result == 0 ? y.Item2.CompareTo(x.Item2) : result;
});
EDIT: Ich habe jetzt die oben geändert in absteigender Reihenfolge zu sortieren. Beachten Sie, dass der richtige Weg dazu besteht, die Reihenfolge des Vergleichs umzukehren (y zu x anstelle von x zu y). Sie müssen nicht negieren nur den Rückgabewert von CompareTo
- dies wird fehlschlagen, wenn CompareTo
int.MinValue
zurückgibt.
Warum nicht das?
List<Tuple<int, int>> list = ...
list = list.OrderBy(i => i.Item1).ToList();
Ja, es erstellt eine neue Liste, aber ich bin nur interessiert - warum magst du das nicht?
List<Tuple<int, int>> list = new List<Tuple<int, int>>
{
new Tuple<int,int>(1,1),
new Tuple<int,int>(0,2),
new Tuple<int,int>(3,0)
};
list.Sort(Comparer<Tuple<int, int>>.Default);
produziert:
0,2
1,1
3,0
Und es ist in-Place, ist es nicht?
Vielleicht, weil es keine In-Place-Sortierung ist? –
@Martinho: Ja, ist es nicht. Ich habe meinen Beitrag bearbeitet, um meine Fragen klarer zu machen. – abatishchev
Ist 'Tuple
Haben Sie sich die List<T>.Sort
Methode angesehen? Sie können eine Überlastung verwenden, die einen Comparison<T>
delegieren oder eine IComparer<T>
nimmt:
list.Sort((x,y)=> x.Item1.CompareTo(y.Item1));
var listSort = from element in list orderby element.Item1 element.Item2 select element;
- 1. Wie ungeordet_set <Tupel <int,int>>?
- 2. Sortierliste <string > von führenden Nummern
- 3. unique_ptr <int[]> oder Vektor <int>?
- 4. C++: Paar <vector<int>, Vektor <int>> p;
- 5. Wie konvertiert man einen Vektor <pair <int,int>> zu multimap <int,int> effizient?
- 6. Liste <int> zu IEnumerable <IComparable>
- 7. C# Konvertierungsliste <int> zu Liste <double>
- 8. Konvertieren Bereich <Int> zu Bereich <String.Index>
- 9. Indizierung IQueryable <int>?
- 10. Karte <int,int> Standardwerte
- 11. Liste Umwandlung <int> in int []
- 12. Ist nicht `void f (A <0>, Tupel <T *...>)` spezialisierter als `void f (A <I>, Tupel <T *...>)`?
- 13. C# erweitern Wohnung Liste <T> auf Dictionary <T, ICollection <int>>
- 14. Was macht "<%:"?</p> <pre><code><%: Model.FirstName %> </code></pre> <p>was bedeutet "<%:" do
- 15. Wie konvertiert man System.Linq.Enumerable.WhereListIterator <int> in die Liste <int>?
- 16. Use-Liste <Tuple <int, int>>, um Daten in Linq
- 17. Hinzufügen von Elementen zu einem Dictionary <Int, Liste <int>>
- 18. emplace_back arbeitet nicht mit std :: vector <std :: map <int, int>>
- 19. konvertieren Dictionary <int, Enumerable> zu Dictionary <int, Enumerable> invertieren Inhalt
- 20. Was ist äquivalent zu map <int, vector <int>> in Python?
- 21. Wörterbuch konvertieren <int, Parent> auf Dictionary <int, Childobject> LINQ
- 22. <%# %> vs <%= %>
- 23. Einfachste Möglichkeit, ein Dictionary <int, Dictionary <int, Foo>> zu IEnumerable <IEnumerable <Foo>> in Linq zu transformieren?
- 24. Was ist der Unterschied in der Leistung von Std :: Set <Paar <int,int>> und Std :: Map <int,int>
- 25. Fehler: keine Übereinstimmung für 'operator []' (Operandentypen sind 'std :: list <std :: pair <int, int>> *' und 'std :: pair <int, int>')
- 26. Zuweisen von std :: function <int(int)> zu std :: function <const int & (const int & x)>
- 27. Deklarieren eines Vektors <Vektor <Paar <int, int>> mit einer bestimmten Größe und Einfügen von Elementen?
- 28. Wie erstellt man Ausdruck <Func <TSource, bool> durch Vergleichen von Func <TSource, int> mit int
- 29. Typ Prüfung auf Nullable <int>
- 30. IList <int> zum Objekt []
ist das nicht in aufsteigender Reihenfolge sortiert? – BobTurbo
@BobTurbo: Gut entdeckt. Wird reparieren. –
Nach Referenz Quell-Tupel haben Standard-Vergleich, der von Item1 und dann Item2 vergleicht. http://referencesource.microsoft.com/#mscorlib/system/tuple.cs, 189 – ShitalShah