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?
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();
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)
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.
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;
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.
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
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;
}