Laden...

Mehrere Listen gleichzeitig sortieren

Erstellt von cDAG vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.139 Views
Thema geschlossen
C
cDAG Themenstarter:in
9 Beiträge seit 2012
vor 11 Jahren
Mehrere Listen gleichzeitig sortieren

Hallo zusammen,
ein gutes neues Jahr wünsche ich. 😃

Ich stehe gerade vor einem Problem.
Und zwar habe ich mehrere Listen von denen ich immer nur eine Liste sortieren möchte, und die anderen Listen sollten der neuen Index Reihenfolge angeglichen werden. Also nicht durcheinander gerade.

Beispiel:


// Pseudo Code 
List<string> A;
List<string> B;
List<string> C;
List<string> D;

A.add("Eins");
A.add("Zwei");
A.add("Drei");
A.add("Vier");
// etc

Diese stehen wie bei einer Excel Tabelle (DataGrid) nebeneinander als Zeilen.
Jetzt möchte ich z.B. Liste A sortieren. B, C und D sollten der Sortierung von A folgen.

Ich hab da leider kein Ahnung von wie.
Hab auch schon bisschen das Internet durchforstet. Aber nichts verständliches gefunden.

Edit:
Eigentlich ist es so:


List<List<string>> rows = new List<List<string>>(); // [row][column]

Also ein gemeinsamen Index hab ich ja (Row, den äußeren).
Den muss ich jetzt mit irgendeinem Wert des inneren Indexes (Column) sortieren lassen.

2.207 Beiträge seit 2011
vor 11 Jahren

Hallo cDAG,

was hast du denn bisher probiert? Nach was hast du gesucht?

Es hat mich nur Sekunden gekostet nach "List.Sort" zu suchen, was mich auf den Link hier bringt.

http://msdn.microsoft.com/de-de/library/3da4abas%28v=vs.80%29.aspx

Gruss

Coffeebean

C
cDAG Themenstarter:in
9 Beiträge seit 2012
vor 11 Jahren

"Oh Come On..." 😉
Klar, kenne ich diese Funktion. Die hab ich sogar ohne Google (etc) gefunden.
Aber auch das habe ich gefunden. .... nur nicht richtig geblickt.
Bzw. diese einfache Sort() Funktion sortiert nur nach A bis Z.

G
47 Beiträge seit 2011
vor 11 Jahren

Hi Coffeebean,

das Sortiern der Liste A ist - glaub ich - nicht das Problem für cDAG, sondern, dass in den anderen Listen dieselbe 'Reihenfolgeveränderung' durchgeführt werden soll.

Offensichtlich stehen die Daten in den Listen in einem inhaltlichen Zusammenhang. Spricht denn etwas dagegen, einfach eine Klasse zu definieren, die die Daten zusammenfasst und diese zu sortieren?

Gruß Gwinn

J
251 Beiträge seit 2012
vor 11 Jahren

Hey,
Du könntest dir eine eigene Vergleichsmethode schreiben.
Wenn du nicht willst, dass sie sich alphabetisch sortiert, musst du durch deine Vergleichsmethode angeben, wie sie sich sortieren soll.

List.Sort-Methode (Comparison(generisch))

C
cDAG Themenstarter:in
9 Beiträge seit 2012
vor 11 Jahren

Danke Gwinn. 😃

Ich überlege gerade sowas in dieser Richtung.
Nur hab ich noch nicht alles durchdacht bzw. weiß noch nicht genau wie das Funktionieren soll.

Nehmen wir mal an ich würde ne Klasse mit den ganzen Werte einer Zeile erstellen.
z.B.

class Rows
Name;
Adresse;
Alter;

und diese Klasse in einer liste packen. (List<Rows>),
wie kann ich jetzt die Liste nach einem Wert sortieren lassen?
z.B. nach Adressen.

PS: Ich glaube es ändert sich nichts. Ob List<class> oder List<list>.

J
251 Beiträge seit 2012
vor 11 Jahren


private void doTo()
{
       List<Rows> test = new List<Rows>();
       //.. Rows hinzugefügt
       test.Sort(CompareByAdress);
}

private int CompareByAdress(Rows row1, Rows row2)
{
       //hier entscheiden, welche Adresse über der Anderen steht
       //return Values -1,0,1
}

J
251 Beiträge seit 2012
vor 11 Jahren

Da fällt mir ein.

Wenn du eine eigene Klasse erstellst, könntest du auch von IComparable erben.
Dann kannst du die .Sort()-Methode ohne Parameter aufrufen.

C
258 Beiträge seit 2011
vor 11 Jahren
static void Main()
        {
            List<Row> table = new List<Row> 
            { 
                new Row() { Addresse = "Zuhause", Age =5, Name = "Hans" }
                new Row() { Addresse = "Birkenweg 2", Age = 32, Name = "Max Musterman"}
                new Row() { Addresse = "Am See 15", Age = 15, Name = "Thomas" }
            };

            var tableByAddress = table.OrderBy(keySelector => keySelector.Addresse);
            var tableByName = table.OrderBy(keySelector => keySelector.Name);
            var tableBayAge = table.OrderBy(keySelector => keySelector.Age);

        }

        public class Row
        {
            string name;
            int age;
            string addresse;

            public string Name
            {
                get { return name; }
                set { name = value; }
            }

            public string Addresse
            {
                get { return addresse; }
                set { addresse = value; }
            }

            public int Age
            {
                get { return age; }
                set { age = value; }
            }
        }

auch eine Möglichkeit

Das sind jedoch Grundlagen die hier im Forum vorausgesetzt werde, bitte beachte:
[Hinweis] Wie poste ich richtig? Punkt 1.1.1

C
cDAG Themenstarter:in
9 Beiträge seit 2012
vor 11 Jahren

Super, danke euch. Ich werde mir das mal genauer angucken und testen.

Und sorry falls ich gegen irgendwelche forenregeln verstoßen hab. Aber wer ließt die schon. 😉 (Späßle). Immerhin können andere die vor dem selben oder ähnlichen Problem stehen, dies schneller in einer Suchmaschine finden.

Hinweis von Abt vor 11 Jahren

Wer sie nicht liest, wird das schon merken. Haben sehr aufmerksame Foren-Mitgliedern, die uns solche Dinge melden 😉
Es wurde Dir jetzt auch alles auf dem Präsentierteller serviert - daher nun zu. Das nächste Mal ein bisschen mehr Eigeninitative.

Thema geschlossen