Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[C#] Wie Liste mithilfe weiterer Liste sortieren?

  Alt 18. Dez 2009, 20:35
Hallo,

ich habe eine Liste, die aus Instanzen besteht.

Code:
List<myClass> myList = new List<myClass>();
"myClass" enthält "Variablen" wie "Vorname", "Nachname" und "id", also myList.Vorname, myList.Nachname und myList.id. Die id entspricht dem Index der Liste.

Zusätzlich habe ich eine weitere Liste, die eine Auswahl von IDs von "myList" enthält:

Code:
List<int> mySmallList = new List<int>();
Nun möchte ich mySmallList mithilfe von MyList sortieren.

Beispiel:

MyList könnte 5 Einträge haben, beispielsweise diese:

Code:
myList[0].Vorname = "Hans";
myList[1].Vorname = "Hugo";
myList[2].Vorname = "Fritz";
myList[3].Vorname = "Dieter";
myList[4].Vorname = "Werner";
MySmallList könnte 3 Einträge beinhalten, beispielsweise so:

Code:
MySmallList[0] = 0; // Hans
MySmallList[1] = 3; // Dieter
MySmallList[2] = 4; // Werner
MySmallList soll nun so sortiert werden, dass die Vornamen der zugehörigen Einträge in myList aufsteigend (oder absteigend) sortiert sind. Das Ergebnis soll demnach das hier sein:

Code:
MySmallList[0] = 3; // Dieter
MySmallList[1] = 0; // Hans
MySmallList[2] = 4; // Werner
Mit Sort() komme ich vermutlich nicht weiter, da ich zur Sortierung beide Listen benötige.
Wie kann ich das denn möglichst performant sortieren?

Meine Überlegung war der Weg über eine weitere Liste, doch das kommt mir unsauber und langsam vor bei vielen Einträgen:

Code:
List<myClass> tempList = new List<myClass>(MySmallList.Count);

foreach (int id in mySmallList)
{
    tempList.Add(myList[id]);
}

tempList.Sort(/* ... */);
MySmallList.Clear();

foreach (myClass entry in tempList)
{
    MySmallList.Add(entry.id);
}

tempList.Clear();
Alle Codes ungetestet, aber das Prinzip sollte klar werden.

Grüße, Matze
  Mit Zitat antworten Zitat