web-dev-qa-db-ja.com

辞書から最初の要素を取得する

次の宣言があります。

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

最初の要素を取得する必要がありますが、キーまたは値がわかりません。これを行う最良の方法は何ですか?

43
cdub

これに来て、辞書からan要素を取得するlinqなしの方法を望んでいる人のために

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"

これが実装固有かどうかはわかりませんが、辞書に要素がない場合、CurrentにはKeyValuePair<string, string>が含まれ、キーと値の両方がnullになります。

(linqのFirstメソッドの背後にあるロジックを調べてこれを見つけ出し、LinqPad 4でテストしました)

22
JesseBuesking

First()を使用できますが、辞書自体には順序がありません。代わりに OrderedDictionary を使用してください。そして、FirstOrDefaultを実行できます。この方法は有意義です。

15
RAS

編集:OrderedDictionaryを使用します。

FirstOrDefault()を使用して最初の値を取得することをお勧めします。

例:

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

辞書はアイテムの順序を定義しません。アイテムが必要な場合は、辞書のKeysまたはValuesプロパティを使用して選択します。

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

辞書の最初の要素を見つける簡単な方法を見つける:)

 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