59

私は次の宣言をしています:

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

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

4

9 に答える 9

118

ここで呼び出すFirstことは、実際には、によって実装されるIEnumerableのLinq拡張機能を呼び出すことであることに注意してくださいDictionary<TKey,TValue>。しかし、辞書の場合、「最初」には定義された意味がありません。この回答によると、最後に追加された項目は「最初」になります(つまり、スタックのように動作します)が、これは実装固有であり、保証された動作ではありません。言い換えると、Firstを呼び出して定義済みのアイテムを取得すると仮定すると、問題が発生する可能性があります。これを使用することは、以下のBobsonが示すように、辞書からランダムなアイテムを取得するのと同じように扱う必要があります。ただし、必要なものがあれば、これが役立つ場合もあります。辞書からのアイテム。


Linqを使用するだけFirst()です:

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

First辞書で使用するKeyValuePairと、この場合はが得られることに注意してくださいKeyValuePair<string, Dictionary<string,string>>


また、Linqと組み合わせることで、の使用から特定の意味を引き出すことができることにも注意してください。FirstOrderBy

var first = like.OrderBy(kvp => kvp.Key).First();
于 2012-12-20T20:28:35.177 に答える
16

を使用できますがFirst()、辞書自体には順序がありません。代わりにOrderedDictionaryを使用してください。そして、あなたはすることができますFirstOrDefault。こうすれば有意義になります。

于 2012-12-20T20:30:39.270 に答える
5

編集: OrderedDictionary を使用します。

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

元:

var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
于 2012-12-20T20:34:52.147 に答える
2
using System.Linq;

Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
于 2012-12-20T20:29:24.203 に答える
2

辞書は項目の順序を定義しません。アイテムを使用するKeysValues、ディクショナリのプロパティが必要な場合は、いずれかを選択します。

于 2012-12-20T20:30:15.297 に答える