wake-up-neo.com

Holen Sie sich das erste Element aus einem Wörterbuch

Ich habe folgende Erklärung:

Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();

Ich muss das erste Element herausholen, weiß aber nicht den Schlüssel oder Wert. Was ist der beste Weg dies zu tun?

34
cdub

Beachten Sie, dass zum Aufrufen von First eine Linq-Erweiterung von IEnumerable aufgerufen wird, die von Dictionary<TKey,TValue> implementiert wird. Für ein Wörterbuch hat "first" jedoch keine definierte Bedeutung. Laut diese Antwort ist das letzte hinzugefügte Element das "Erste" (mit anderen Worten, es verhält sich wie ein Stapel), aber das ist implementierungsspezifisch, nicht das garantiert ​​Verhalten. Mit anderen Worten: Wenn Sie davon ausgehen, dass Sie ein definiertes Element durch Aufrufen von Zuerst ​​erhalten, müssen Sie um Probleme bitten. Die Verwendung dieses Elements sollte so behandelt werden, als ob Sie ein erhalten würden random Eintrag aus dem Dictionary, wie von Bobson unten angegeben. Manchmal ist dies jedoch nützlich, da Sie nur any Elemente aus dem Wörterbuch benötigen.


Benutze einfach den Linq First():

var first = like.First();
string key = first.Key;
Dictionary<string,string> val = first.Value;

Beachten Sie, dass die Verwendung von First für ein Wörterbuch KeyValuePair ergibt, in diesem Fall KeyValuePair<string, Dictionary<string,string>>.


Beachten Sie auch, dass Sie könnte eine bestimmte Bedeutung aus der Verwendung von First ableiten, indem Sie es mit dem Linq OrderBy kombinieren:

var first = like.OrderBy(kvp => kvp.Key).First();
91
McGarnagle

Für jeden, der zu diesem Thema kommt, möchte man, dass ein linearer Weg ein ein Element aus einem Wörterbuch erhält

var d = new Dictionary<string, string>();
d.Add("a", "b");
var e = d.GetEnumerator();
e.MoveNext();
var anElement = e.Current;
// anElement/e.Current is a KeyValuePair<string,string>
// where Key = "a", Value = "b"

Ich bin nicht sicher, ob dies implementierungsspezifisch ist, aber wenn Ihr Wörterbuch keine Elemente enthält, enthält Current einen KeyValuePair<string, string>, wobei Schlüssel und Wert null sind.

(Ich habe mir die Logik hinter der First-Methode von linq angesehen, um das herauszufinden, und habe es über LinqPad 4 getestet)

18
JesseBuesking

Obwohl Sie First() verwenden können, haben Wörterbücher keine Reihenfolge an sich. Bitte verwenden Sie stattdessen OrderedDictionary . Und dann können Sie FirstOrDefault machen. Auf diese Weise wird es sinnvoll sein.

14
RAS

BEARBEITEN: Verwenden Sie ein OrderedDictionary.

Es ist besser, FirstOrDefault() zu verwenden, um den ersten Wert abzurufen.

Ex:

var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
4
naren.katneni

Das Wörterbuch definiert keine Reihenfolge der Elemente. Wenn Sie nur ein Element benötigen, verwenden Sie die Keys- oder Values-Eigenschaften des Wörterbuchs, um eines auszuwählen.

2
Alexei Levenkov
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
1
Agustin Meriles

ich finde den ersten Weg im Wörterbuch :)

 Dictionary<string, Dictionary<string, string>> like = 
 newDictionary<string,Dictionary<string, string>>();

 foreach(KeyValuePair<string, Dictionary<string, string>> _element in like)
 {
   Console.WriteLine(_element.Key); // or do something
   break;
 }
0
Levris First