26 Stimmen

Gibt es einen sortierten Sammlungstyp in .NET?

Ich suche nach einem Container, der alle seine Elemente in Ordnung hält. Ich habe mir SortedList angesehen, aber das erfordert einen separaten Schlüssel und erlaubt keine doppelten Schlüssel. Ich könnte auch einfach einen unsortierten Container verwenden und ihn nach jedem Einfügen explizit sortieren.

Verwendung:

  • Gelegentliches Einfügen
  • Häufiges Durchlaufen in Reihenfolge
  • Am besten ohne mit den eigentlichen Objekten separaten Schlüsseln zu arbeiten und eine Vergleichsfunktion zum Sortieren zu verwenden.
  • Stabiles Sortieren für äquivalente Objekte ist erwünscht, aber nicht erforderlich.
  • Zugriff auf Elemente durch Zufall ist nicht erforderlich.

Ich bin mir bewusst, dass ich mir einfach selbst eine ausbalancierte Baumstruktur erstellen kann, aber ich habe mich gefragt, ob das Framework bereits ein solches Biest enthält.

-1voto

Joel Coehoorn Punkte 377088

Wenn der Schlüssel auch ein Attribut des Objekts ist, könnten Sie System.Collections.ObjectModel.KeyedCollection versuchen. Es handelt sich um eine abstrakte Klasse, aber wenn Ihr Schlüssel nur eine Eigenschaft des Elements ist, dann ist es wirklich einfach, davon abzuleiten.

-15voto

Perry Pederson Punkte 95

Hier ist ein alter Trick, den ich früher in VB6 benutzt habe, um Dinge alphabetisch zu sortieren: Verwenden Sie ein System.Windows.Forms-ListBox-Objekt und setzen Sie seine "Sorted"-Eigenschaft auf true. In C# können Sie jedes Objekt in die ListBox einfügen, und es sortiert das Objekt alphabetisch nach seinem ToString()-Wert:

für ein Klassenmodul:


using System.Windows.Forms;

    static void Main(string[] args)
    {
        ListBox sortedList = new ListBox();
        sortedList.Sorted = true;

        sortedList.Items.Add("foo");
        sortedList.Items.Add("bar");
        sortedList.Items.Add(true);
        sortedList.Items.Add(432); 

        foreach (object o in sortedList.Items)
        {
            Console.WriteLine(o);
        }

        Console.ReadKey();
    }

Dies wird angezeigt:

432
bar
foo
True

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X