Leider ist die Erstellung der Lookup-Klasse im .NET-Framework intern. Die Art, wie die Suche erstellt wird, erfolgt über statische Factory-Methoden in der Lookup-Klasse. Diese sind:
internal static Lookup<TKey, TElement> Create<TSource>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer);
internal static Lookup<TKey, TElement> CreateForJoin(IEnumerable<TElement> source, Func<TElement, TKey> keySelector, IEqualityComparer<TKey> comparer);
Diese Methoden sind jedoch intern und nicht für den Verbrauch von uns. Die Nachschlageklasse hat keine Möglichkeit, Elemente zu entfernen.
Eine Möglichkeit zum Hinzufügen und Entfernen besteht darin, ständig neue ILookups zu erstellen. Zum Beispiel - wie man ein Element löscht.
public class MyClass
{
public string Key { get; set; }
public string Value { get; set; }
}
//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);
//Remove the item where the key == "KEY";
//Now you can do something like that, modify to your taste.
lookup = lookup
.Where(l => !String.Equals(l.Key, "KEY"))
//This just flattens the set - up to you how you want to accomplish this
.SelectMany(l => l)
.ToLookup(l => l.Key, l => l.Value);
Für die Liste hinzuzufügen, könnten wir so etwas tun:
//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);
var item = new MyClass { Key = "KEY1", Value = "VALUE2" };
//Now let's "add" to the collection creating a new lookup
lookup = lookup
.SelectMany(l => l)
.Concat(new[] { item })
.ToLookup(l => l.Key, l => l.Value);
Warum nicht erstellen Sie youre Lookup Implementierung besitzen? Bei einem Dictionary sollte es nicht mehr als ein paar Zeilen Code benötigen. – leppie
Irgendwie einverstanden mit leppie hier. Die Nachschlageklasse dient nur zum Nachschlagen von Daten, nicht zum Ändern von Daten. Außerdem ist das Wörterbuch sowieso nicht zu schwer zu benutzen, vielleicht wäre es schön, einen Wrapper oben auf ein Wörterbuch zu schreiben. –
Die Suche hat auch einen anderen Mechanismus, um die tatsächlichen Lookups über ein Wörterbuch zu tun. Aber mit einigen einfachen Tests sind beide sehr schnell. –