Sortieren einer Wörterbuch-Wert, der ein Objekt mit einem DateTime
Habe ich ein struct Test, die ich als Wert ein dictionary.
Was ich tun möchte, ist eine Art Wörterbuch, indem Sie die DateTime des Wertes.
struct Test
{
DateTime dt;
public string ID;
}
Dictionary<String, Test> dict = new Dictionary<String,Test>();
Test t = new Test();
t.dt = DateTime.Now;
t.ID = "XUDF";
dict.Add(t.ID, t);
t.dt = DateTime.Now.AddDays(17);
t.ID = "RFGT";
dict.Add(t.ID, t);
t.dt = DateTime.Now.AddDays(3);
t.ID = "ADLV";
dict.Add(t.ID, t);
t.dt = DateTime.Now.AddHours(2);
t.ID = "SKFU";
dict.Add(t.ID, t);
Ich bin mir nicht sicher, was zu tun ist, nach dieser.
Auch ist dies der beste Weg, um darüber zu gehen?
Ich bin mit .net 3
Was ich versuche zu tun, ist eine Liste, auf die ich zugreifen kann, die von der ID, sondern auch bestellt, die von der datetime-t.dt.
Ich möchte in der Lage sein, um wählen Sie ein Objekt über seine ID, aber auch in der Lage sein zu Durchlaufen und haben es kommen, um von datetime.
- Vielleicht wusste Sie das schon: es ist keine C# - Wörterbuch, es ist eine .NET-Wörterbuch.
- ...nutzen Sie eine OrderedDictionary?
- Warum willst du Sortieren Sie die Wörterbuch? Ich macht keinen Sinn so wie es ist. Meinst du, dass Sie wollen, um alle die Werte des dictionary, sortiert nach den Werten von einem Ihrer Mitglied?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was meinst du mit "Sortieren Sie die Wörterbuch"? Ein Wörterbuch ist keine "Bestellung" per se. Es ist ein keyed-Sammlung, die zugrunde liegende Implementierung ist die hash-Tabelle.
Ich nehme an, was Sie sagen wollte, "ich will aufzählen über den Inhalt des Wörterbuchs in der Reihenfolge der Werte." Das kann getan werden, folgendermassen:
Wenn auf der anderen Seite, Sie wirklich wollen/brauchen eine geordnete Sammlung, die Sie benötigen, zu spezifizieren, was Ihre tatsächlichen Bedürfnisse sind.
Wörterbuch sind grundsätzlich unsortiert. Es sind sortiert Implementierungen von IDictionary, aber Sie sind in der Regel sortiert nach dem Key, nicht mit dem Wert (bzw. die Attribute der Wert). Wenn man die Werte sortiert, indem Sie das dt-Feld der Wert, man könnte etwas machen wie:
Aber dadurch entfällt das Wörterbuch. Ich vermute, dass Sie brauchen eine andere Struktur der Daten, aber wir brauchen mehr wissen über den Anwendungsfall sicher zu sein, was.
Basierend auf Ihre Frage und andere haben darauf hingewiesen, Wörterbücher sind nicht sortiert, also ist der einzige logische Weg, um wieder ein sortiertes Wörterbuch ist wirklich zurückgeben sortiert
IEnumerable<KeyValuePair<String, Test>>
statt. Und dies zu tun ist einfach.Könnten Sie leicht ändern Sie die
select
Ausdruck um den Rückgabewert Teil derKeyValuePair<,>
oder die Rückkehr eines anonymen Typs statt.