Beschreibung:
Eine Liste mit Instanzen soll anhand eines bestimmten Attributs absteigend sortiert werden, ohne dass ein Interface benötigt verwendet werden soll.
public static List<Klasse> OrderElementsByValue(List<Klasse> ElementListe)
{
List<Klasse> ElementListeSortiert = new List<Klasse>();
// Merkwerte
int HoechsterWert = -1; // höchster Wert (Annahme: gültige Werte >= 0)
int IndexVonElement = -1; // Index des Elements mit höchstem gefundenen Wert
while (ElementListe.Count > 0)
{
// Elemente werden der Reihe nach durchgegangen
for (int i = 0; i < ElementListe.Count; i++)
{
// Wert des Element im aktuellen Schleifendurchlauf > Merkwert
if (ElementListe[i].GetWert > HoechsterWert)
{
// Merkwerte bekommen Werte des aktuell höchstwertigen Elements
HoechsterWert = ElementListe[i].GetWert;
IndexVonElement = i;
}
}
if (IndexVonElement != -1)
{
// das Element mit dem höchsten gefundenen Wert wird eingetragen
ElementListeSortiert.Add(ElementListe[IndexVonElement]);
// Element wird aus Liste entfernt
ElementListe.RemoveAt(IndexVonElement);
// Merkwerte werden für nächsten Schleifendurchlauf zurückgesetzt
HoechsterWert = -1;
IndexVonElement = -1;
}
}
// ElementListeSortiert.Reverse(); // entkommentieren, falls aufsteigend sortiert werden soll
return ElementListeSortiert;
}
Hinweis: Keine Garantie auf Fehlerfreiheit. Feedback gerne willkommen. Die Methode ist in erster Linie für Leute/Anfänger wie mich gedacht, denen der Umgang mit Interfaces unwillkommen und/oder nicht geläufig und/oder nicht möglich ist. Wenn eine solche Funktion hier im Forum schon beschrieben ist oder es dafür eine fertige Funktion in C# gibt, möge man mir das verzeihen und mich freundlich darauf hinweisen. Danke.
Todo: Irgendwas machen, damit die Elemente aus der Liste nicht gelöscht werden. Ich lasse mir etwas einfallen. Alternativ einfach eine Kopie der Liste erzeugen.
edit: Umbenennung <Klassenname> -> <Klasse>
Schlagwörter: Liste Instanzen List sortieren Interface sort
-> Informatik-Infotainment <-
Hallo Jack_AI,
vielen Dank für deine Mühe. Allerdings kann dein Code gerade für Anfänger verwirrend sein. Es fehlt die Definition von Klassenname. "Klassenname" ist ja wohl kein Platzhalter, sondern eine konkrete Klasse (die bei dir vorher wohl Element hieß, wie du an einer Stelle zu ändern vergessen hast), die die Methode GetWert anbieten muss, damit das ganze funktioniert. Das wäre gerade eine Stelle, an der man mit Interfaces arbeiten würde. Wobei wenn man das schon macht, man es nicht über GetWert machen würde, sondern gleich iComparer o.ä. verwenden würde. Auch der Sortieralgorithmus selbst ist nicht für ein Snippet (das ja als Vorlage für den eigenen Einsatz dienen soll) geeignet. Deshalb habe ich deinen Beitrag mal hierher verschoben. Auf diese Weise kannst kannst du auch noch weiteres Feedback bekommen.
herbivore
Hallo herbivore.
Na schön. Danke für deine wertvolle Kritik. Ich sehe schon, die Zielgruppe für meinen Code-Fetzen war wohl allzu speziell. Ansonsten ist weiteres Feedback weiterhin gerne willkommen.
Grüße,
Jack
-> Informatik-Infotainment <-