Laden...

ArrayList nach bestimmten Zahlen in einem String sortieren

Erstellt von indeopax vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.727 Views
Thema geschlossen
I
indeopax Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Hinweis von herbivore vor 10 Jahren

vorneweg: ArrayList gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic.

ArrayList nach bestimmten Zahlen in einem String sortieren

Hallo,

ich habe ein kleines Problem. Meine ArrayList beinhaltet mehrere Strings die mit einem Komma getrennt sind


ArLis.Add("12,13");
ArLis.Add("43,12");
ArLis.Add("21,13");

usw.

Nun wollte ich das Ganze aber mit ArLis.Sort() sortieren. Das brachte aber einen Fehler.

Eigentlich möchte ich auch nur aufsteigend nach den ersten beiden Zahlen vor den Komma sortieren.

Habt ihr einen Tipp wie ich das anstelle.

Grüße

2.207 Beiträge seit 2011
vor 10 Jahren

HGallo indeopax,

Arraylisten sind veraltet. Du solltest eine Liste nehmen (System.Collections.Generic-Namespace).

Dann geht auch das Sort.

Ich sehe in


List<string> arlist  = new List<string>();
            arlist.Add("12,13");
            arlist.Add("43,12");
            arlist.Add("21,13");
            arlist.Sort();

keinen Syntaxfehler. Nichts desto trotz solltest du dir mal den IComparer anschauen.

Sort-MSDN

Sind aber alles Grundlagen.

Gruss

Coffeebean

C
80 Beiträge seit 2010
vor 10 Jahren

Hallo indeopax,

erstens ist eine ArrayList schlecht. Verwende hier eine generische Collection, bsp. List<T>. Da du immer Tuple einfügst würde ich für T die Klasse Tuple<string,string> wählen.

Sortieren kannst du es dann so (ungetestet):


List<Tuple<string,string>> liste = new List<Tuple<string,string>>();
liste.Add(new Tuple<string,string>("12","13"));
iste.Add(new Tuple<string,string>("43","12"));
iste.Add(new Tuple<string,string>("21","13"));

//sortieren mit Lamda-Ausdruck
//first und second sind die Tuple, die aktuell verglichen werden
liste.Sort((first,second)=>first.Item1.CompareTo(second.Item1));

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo indeopax,

wenn du schon eine Fehlermeldung bekommst, dann solltest du sie unbedingt immer (exakt) angeben, siehe [Hinweis] Wie poste ich richtig? Punkt 5.

Bitte beachte bei weiteren Fragen auch Punkt 1.1.1.

Dass ArrayList Mist ist und nicht mehr verwendet werden sollte, wurde schon gesagt.

Das voneweg noch kurz zu der Frage:

Wenn du nur nach einem Teil des Strings sortiert werden soll und dieser Teil auch noch als Zahl interpretiert werden soll, dann kannst du dir einen passenden IComparer<T> o.ä. schreiben und beim Aufruf der Sort-Methode angeben. In dem Comparer liest du den entsprechenden Teil aus den Strings (z.B. mit Regex), wandelst in eine Zahl um (z.B. mit int.Parse) und vergleichst die Resultate.

Es ist aber zu überlegen, ob du nicht - wie CSharperUser es andeutet - eine passendere Datenstruktur verwendest, wobei wenn du nach Zahlen sortieren willst, als Typparameter wohl eher int als String in Frage käme.

herbivore

Thema geschlossen