Laden...

Liste sortieren ohne Interface

Erstellt von Jack_AI vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.672 Views
J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 15 Jahren
Liste sortieren ohne Interface

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

49.485 Beiträge seit 2005
vor 15 Jahren

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

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 15 Jahren

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