C# 辞書を反復処理する際の順序の維持
標準の C# 辞書は、列挙中の要素の特定の順序を本質的に保証しません。 挿入順序に関係なく、順序は予期せずに変化する可能性があります。 ただし、必要に応じて反復順序を制御する方法があります。
順序付けられた列挙のメソッド
いくつかの戦略により、辞書要素の順序付けられた走査を保証できます。
1. KeyValuePair ペアの並べ替え:
このメソッドは、辞書を KeyValuePair
オブジェクトのソートされた配列に変換します。
<code class="language-csharp">var sortedKVPs = _Dictionary.OrderBy(x => x.Key).ToArray(); foreach (KeyValuePair<string, string> kvp in sortedKVPs) { Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value)); }</code>
このコード スニペットは、キーに基づいてキーと値のペアを並べ替え、並べ替えられた配列を反復処理して、この例ではアルファベット順に並べます。
2. OrderedDictionary の活用:
OrderedDictionary
クラスは挿入順序を明示的に維持します。
<code class="language-csharp">// Create an ordered dictionary var orderedDictionary = new OrderedDictionary(); // Add elements orderedDictionary.Add("orange", "1"); orderedDictionary.Add("apple", "4"); orderedDictionary.Add("cucumber", "6"); // Add using indexer orderedDictionary["banana"] = 7; orderedDictionary["pineapple"] = 7; // Enumerate the ordered dictionary foreach (DictionaryEntry entry in orderedDictionary) { Trace.Write(String.Format("{0}={1}", entry.Key, entry.Value)); }</code>
要素は、OrderedDictionary
に追加された順序とまったく同じ順序で取得されます。 OrderedDictionary
はレガシー クラスであることに注意してください。新しいプロジェクトの場合は、SortedDictionary
または SortedList<TKey, TValue>
の使用を検討してください。 SortedDictionary
はキーをソートし、SortedList<TKey, TValue>
は同様の機能を提供し、場合によってはパフォーマンスが向上します。
以上がC# で辞書要素の順序付き列挙を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。