私は次の宣言をしています:
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
最初の要素を取り出す必要がありますが、キーまたは値がわかりません。これを行うための最良の方法は何ですか?
ここで呼び出す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と組み合わせることで、の使用から特定の意味を引き出すことができることにも注意してください。First
OrderBy
var first = like.OrderBy(kvp => kvp.Key).First();
を使用できますがFirst()
、辞書自体には順序がありません。代わりにOrderedDictionaryを使用してください。そして、あなたはすることができますFirstOrDefault
。こうすれば有意義になります。
編集: OrderedDictionary を使用します。
FirstOrDefault()
最初の値を取得するために使用することをお勧めします。
元:
var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
using System.Linq;
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
辞書は項目の順序を定義しません。アイテムを使用するKeys
かValues
、ディクショナリのプロパティが必要な場合は、いずれかを選択します。