4

だから、私はこのようなコードを見つけました:

class CustomDictionary
{
  Dictionary<string, string> backing;
  ...
  public string Get(int index)
  {
    return backing.ElementAtOrDefault(index); //use linq extensions on IEnumerable
  }
}

そして、これは次のように使用されました:

for(int i=0;i<mydictionary.Count;i++)
{
  var value=mydictionary.Get(i);
}

パフォーマンスの問題とこのようにすることの醜さは別として、このコードは実際に正しいですか?つまり、IEnumerable on Dictionaryは、反復中にディクショナリで何も変更されないと仮定して、常に同じ順序で物事を返すことが保証されていますか?

4

3 に答える 3

3

これは保証されません。もちろん、SortedDictionary <>用であり、配列やリスト用でもあります。しかし、辞書ではありません。

辞書を変更しなければ安定する可能性がありますが、それは保証されていません。あなたは自分自身に問いかけなければなりません-あなたは幸運だと感じますか?;)

于 2013-01-25T16:35:37.657 に答える
1

挿入された順序で要素を取得したい場合は、最初に必要な要素に応じて、スタックキューを調べる必要があります。

于 2013-01-25T16:36:33.780 に答える
0

はい、同じアイテムを入手できます。

あなたが指定したように、あなたが提示した方法はそうするための非常に非効率的な方法です。

ElementAtOrDefaultは、IEnumerableのLINQ拡張メソッドであり、アイテムごとに、指定されたアイテムまですべて反復することを意味します。

于 2013-01-25T16:49:29.490 に答える