web-dev-qa-db-ja.com

Dictionary <string、string>から最初のキーを取得します

System.Collections.Generic.Dictionary<string, string>を使用しています。

この辞書から最初のキーを返したいです。 dic.Keys[0]を試しましたが、Keysプロパティ(KeyCollectionオブジェクト)にあるのは列挙子だけです。

最初のキーを取得するには、すべてのキーを列挙する必要がありますか?

42
Michel

.NET 3.5を使用していると仮定すると:

dic.Keys.First();

ディクショナリでキー/値のペアが反復される保証された順序はないことに注意してください。 lotsで、辞書に入れた最初のキーを取得できますが、絶対に必須ではありませんそれに依存しています。 Skirwanが言うように、「最初」の概念は実際にはありません。本質的に上記はあなたに「辞書からの鍵」を与えるでしょう-それは保証されたすべてについてです。

(辞書が空かどうかわからない場合は、FirstOrDefaultを使用できます。)

97
Jon Skeet

「最初の」という考えは、エントリには順序がないため、実際には辞書には当てはまりません。挿入または削除は、キーの順序を根本的に変更することができます。

23
Skirwan

まず、いいえ、すべてのエントリを列挙する必要はありません。最初のアイテムを列挙するだけです。

IEnumerator enumerator = dictionary.Keys.GetEnumerator();
enumerator.MoveNext();
object first = enumerator.Current;

理想的には、MoveNext()が実際に成功した(boolを返す)ことを確認します。そうしないと、Currentの呼び出しがスローされる場合があります。

Dicitonaryの順序が指定されていないことにも注意してください。つまり、「最初の」項目は実際には任意のキーであり、後続の呼び出しでは異なる場合があります(実際にはそうではありません)。

13
Paul Ruane

少し上に見えますが、どうですか

foreach (<Type> k in dic.Keys)
    return k;
9

linqテクノロジーを使用できます

var key = dic.Take(1).Select(d => d.Key).First()

または、別の検索を使用できます

var myList = dic.Take(1).Where(d => d.Key.Contains("Heaven")).ToList();
1
Think Big