ホームページ > バックエンド開発 > C++ > C# ディクショナリが要素の順序を保証しないのはなぜですか? アルファベット順を保証するにはどうすればよいですか?

C# ディクショナリが要素の順序を保証しないのはなぜですか? アルファベット順を保証するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-17 19:01:10
オリジナル
356 人が閲覧しました

Why Doesn't C# Dictionary Guarantee Element Order, and How Can I Ensure Alphabetical Ordering?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート