Was ist der Unterschied zwischen LINQ ToDictionary und ToLookup? Sie scheinen dasselbe zu tun.
Was ist der Unterschied zwischen LINQ ToDictionary und ToLookup? Sie scheinen dasselbe zu tun.
Antworten:
Ein Wörterbuch ist eine 1: 1-Zuordnung (jeder Schlüssel ist einem einzelnen Wert zugeordnet), und ein Wörterbuch kann nachträglich geändert (bearbeitet) werden.
Eine Suche ist eine 1: viele-Zuordnung (Multi-Map; jeder Schlüssel wird einem IEnumerable<>
der Werte mit diesem Schlüssel zugeordnet), und es gibt keine Mutation auf der ILookup<,>
Schnittstelle.
Als Randnotiz können Sie eine Suche (über den Indexer) nach einem nicht vorhandenen Schlüssel abfragen, und Sie erhalten eine leere Sequenz. Wenn Sie dasselbe mit einem Wörterbuch tun, erhalten Sie eine Ausnahme.
Also: Wie viele Datensätze teilen sich jeden Schlüssel?
Eine zu vereinfachte Sichtweise ist, dass a Lookup<TKey,TValue>
in etwa mit a vergleichbar istDictionary<TKey,IEnumerable<TValue>>
ILookup<,>
oder ist eine Implementierung frei, eine zu werfen KeyNotFoundException
. Die Implementierung in Rx wirft a KeyNotFoundException
.
Dictionary<TKey, IEnumerable<TValue>>
könnte als ein Wörterbuch von Listen beschrieben werden. Das ToLookup()
ist so, als würde man sagen: Gib mir ein Wörterbuch mit Listen. Aus irgendeinem Grund half es mir, es so zu hören, dass es mir klar wurde.
ToDictionary ist <TKey, TValue>, während ToLookup <TKey, T1, T2, T3, ...> IGrouping ähnelt, die Aufzählung jedoch im Speicher bleibt.
T1, T2, T3, ...
; ToLookup und ToDictionary (die Methoden selbst) haben