Dies mag seltsam erscheinen, aber wenn man das ignoriert, gibt es eine nette, prägnante Möglichkeit, eine Liste in ein Wörterbuch zu konvertieren, wobei jedes Schlüsselwertpaar im Wörterbuch nur jede Zeichenfolge in der Liste ist. dh
List = string1, string2, string3
Dictionary = string1/string1, string2/string2, string3/string3
Ich habe viel gesucht und es gibt buchstäblich Dutzende von Beispielen für Stackoverflow, die es in die entgegengesetzte Richtung tun, aber nicht so.
Der Grund dafür ist, dass ich zwei Komponenten des dritten Teils habe und das Ändern dieser Komponenten nicht in meinen Händen liegt. Einer gibt eine Liste von E-Mail-Adressen als Liste zurück und der andere sendet E-Mails, bei denen der Parameter An ein Wörterbuch ist. Der Schlüssel des Wörterbuchs ist die E-Mail-Adresse und der Wert ist ihr richtiger Name. Ich kenne den richtigen Namen jedoch nicht, aber es funktioniert immer noch, wenn Sie den richtigen Namen auch auf die E-Mail-Adresse setzen. Deshalb möchte ich eine Liste in ein Wörterbuch konvertieren. Dafür gibt es viele Möglichkeiten. Eine foreach-Schleife in der Liste, die einem Wörterbuch eine KVP hinzufügt. Aber ich mag knappen Code und habe mich gefragt, ob es eine einzeilige Lösung gibt.
quelle
Antworten:
Versuche dies:
Mit dem ersten Lambda können Sie den Schlüssel auswählen, mit dem zweiten den Wert.
Sie können damit spielen und Werte von den Tasten unterscheiden, wie folgt:
Wenn Ihre Liste Duplikate enthält, fügen Sie Folgendes hinzu
Distinct()
:BEARBEITEN Um den gültigen Grund zu kommentieren, denke ich, dass der einzige Grund, der für solche Konvertierungen gültig sein könnte, darin besteht, dass die Schlüssel und die Werte im resultierenden Wörterbuch irgendwann voneinander abweichen werden. Beispielsweise würden Sie eine erste Konvertierung durchführen und dann einige der Werte durch etwas anderes ersetzen. Wenn die Schlüssel und Werte immer gleich bleiben,
HashSet<String>
passt dies viel besser zu Ihrer Situation:quelle
.Distinct()
nach hinzufügenlist
, um dies zu vermeiden.Benutze das:
Weitere Informationen finden Sie unter MSDN .
Wie Pranay in den Kommentaren ausführt, schlägt dies fehl, wenn ein Element mehrmals in der Liste vorhanden ist.
Abhängig von Ihren spezifischen Anforderungen können Sie entweder
var dict = list.Distinct().ToDictionary(x => x);
ein Wörterbuch mit verschiedenen Elementen abrufen oderToLookup
stattdessen Folgendes verwenden:Dies gibt einen zurück,
ILookup<string, string>
der im Wesentlichen derselbe ist wieIDictionary<string, IEnumerable<string>>
, sodass Sie eine Liste unterschiedlicher Schlüssel mit jeder Zeichenfolgeninstanz darunter haben.quelle
Mit
ToDictionary
:Wenn es möglich ist, dass eine Zeichenfolge wiederholt wird,
Distinct
rufen Sie entweder zuerst die Liste auf (um Duplikate zu entfernen) oder verwenden SieToLookup
diese Option, um mehrere Werte pro Schlüssel zuzulassen.quelle
Sie können verwenden:
quelle
BEARBEITEN
Eine andere Möglichkeit, mit Duplikaten umzugehen, besteht darin, dass Sie dies tun können
oder
Einfacher Weg ist
Aber stellen Sie sicher, dass sich keine Zeichenfolge wiederholt. Wiederum funktioniert der obige Code nicht für Sie
Wenn es eine Zeichenfolge gibt, die sich wiederholt, ist es besser, dies so zu tun
quelle