C# ディクショナリの順序付け (または順序付けの欠如) を理解する
多くの C# 開発者は、Dictionary
要素が挿入順序で返されると誤って想定しています。 これは間違いです。次の例はこれを示しています:
<code class="language-csharp">// Dictionary declaration private Dictionary<string, string> _Dictionary = new Dictionary<string, string>(); // Add elements _Dictionary.Add("orange", "1"); _Dictionary.Add("apple", "4"); _Dictionary.Add("cucumber", "6"); _Dictionary["banana"] = "7"; _Dictionary["pineapple"] = "7"; // Iterate and observe the order (non-deterministic) foreach (KeyValuePair<string, string> kvp in _Dictionary) { Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value)); }</code>
Dictionary
は挿入順序の維持よりも効率的なキー検索を優先するハッシュ テーブルを使用するため、出力は予測できません。 反復の順序は保証されておらず、変更される可能性があります。
SortedDictionary によるアルファベット順の強制
要素をアルファベット順に並べ替える必要がある場合は、代わりに SortedDictionary
を使用してください。 このクラスは、キーの比較子に基づいてソートされた順序を維持します (デフォルトは文字列のアルファベット順です)。
<code class="language-csharp">// SortedDictionary declaration private SortedDictionary<string, string> _SortedDictionary = new SortedDictionary<string, string>(); // Add elements _SortedDictionary.Add("orange", "1"); _SortedDictionary.Add("apple", "4"); _SortedDictionary.Add("cucumber", "6"); _SortedDictionary.Add("banana", "7"); _SortedDictionary.Add("pineapple", "7"); // Iterate and observe the alphabetical order foreach (KeyValuePair<string, string> kvp in _SortedDictionary) { Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value)); }</code>
これにより、一貫してアルファベット順にソートされた出力が生成されます。 SortedDictionary
には Dictionary
に比べてパフォーマンスのオーバーヘッドがあることに注意してください。そのため、順序が重要な場合にのみ使用してください。
以上がC# ディクショナリが要素の順序を保証しないのはなぜですか? アルファベット順を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。