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.
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
"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.
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
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.
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>.
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
}
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.
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
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.
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.