2 Stimmen

Sammlungsklasse, die eine sortierte Reihenfolge auf der Grundlage einer bestimmten Eigenschaft beibehält?

Ich bin auf der Suche nach einer Auflistungsklasse, die automatisch Elemente in sortierter Reihenfolge auf der Grundlage einer Eigenschaft (nämlich "Priorität") einfügen wird, so dass, wenn ich später darüber iterieren, ich die Elemente in dieser Reihenfolge zurückbekomme.


SortierteListe scheint nach Schlüsseln zu sortieren, was nicht das ist, was ich will.

3voto

Anthony Pegram Punkte 119149

Sie können eine SortedSet<T> die neu in .NET 4 ist. Sie können sie für eine Klasse verwenden, die IComparable<T> oder Sie können einen externen Komparator über eine Konstruktorüberladung bereitstellen. Beispiel:

class Foo
{
    public int Bar { get; set; }
}

class FooComparer : IComparer<Foo>
{
    public int Compare(Foo x, Foo y)
    {
        // add null checking, demo purposes only
        return x.Bar.CompareTo(y.Bar);
    }
}

...

SortedSet<Foo> sortedFoos = new SortedSet<Foo>(new FooComparer());
sortedFoos.Add(new Foo() { Bar = 2 });
sortedFoos.Add(new Foo() { Bar = 1 });

foreach (Foo foo in sortedFoos)
{
    Console.WriteLine(foo.Bar);
}
// Prints 1, 2

Note : Diese Sammlung verhält sich wie eine HashSet<T> . Wenn Sie mehrere Objekte hinzufügen, die gleich sind, werden sie verworfen.

2voto

João Silva Punkte 84947

Sie brauchen eine PriorityQueue . Sie können mehrere Implementierungen in dieser ähnlichen Frage finden: C# Prioritäts-Warteschlange .

1voto

mpen Punkte 253762

C5 hat einen IntervalHeap das tut, was ich will.

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