C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でHybridDictionaryのキーを含むICollectionを取得する方法

C#のHybridDictionaryクラスは、要素数が少ないうちはListDictionaryとして動作し、コレクションが大きくなると自動的にHashtableへ切り替わるという特性を持つ、System.Collections.Specialized名前空間の便利なディクショナリです。

HybridDictionaryに格納されたすべてのキーを取得するには、Keysプロパティを使用します。このプロパティは、キーを含むICollectionを返します。さらに、CopyToメソッドを組み合わせれば、取得したキーを配列へコピーして扱うこともできます。以下に具体的なコード例を示します。

例1:HybridDictionaryのすべてのキーを配列へコピーして表示する

using System;
using System.Collections.Specialized;
public class Demo {
    public static void Main(){
        HybridDictionary dict = new HybridDictionary();
        dict.Add("One", "Katie");
        dict.Add("Two", "Andy");
        dict.Add("Three", "Gary");
        dict.Add("Four", "Mark");
        dict.Add("Five", "Marie");
        dict.Add("Six", "Sam");
        dict.Add("Seven", "Harry");
        dict.Add("Eight", "Kevin");
        dict.Add("Nine", "Ryan");
        String[] strArr = new String[dict.Count];
        dict.Keys.CopyTo(strArr, 0);
        for (int i = 0; i < dict.Count; i++)
        Console.WriteLine(strArr[i]);
    }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Eight
Seven
Four
Three
One
Five
Six
Two
Nine

コードの解説

まずHybridDictionaryのインスタンスを作成し、Addメソッドで9組のキーと値を登録しています。続いて、dict.Countと同じサイズのString型配列を用意し、Keysプロパティに対してCopyToメソッドを呼び出すことで、インデックス0を起点としてすべてのキーを配列へコピーします。最後にforループで配列の内容を順番にコンソールへ出力しています。

例2:数値を文字列キーとして格納した場合

別の例も見てみましょう。今度は「1」〜「6」という文字列をキーとして登録した場合のコードです。

using System;
using System.Collections.Specialized;
public class Demo {
    public static void Main(){
        HybridDictionary dict = new HybridDictionary();
        dict.Add("1", "A");
        dict.Add("2", "B");
        dict.Add("3", "C");
        dict.Add("4", "D");
        dict.Add("5", "E");
        dict.Add("6", "F");
        String[] strArr = new String[dict.Count];
        dict.Keys.CopyTo(strArr, 0);
        for (int i = 0; i < dict.Count; i++)
            Console.WriteLine(strArr[i]);
    }
}

出力結果

このコードを実行すると、次の出力が得られます。

1
2
3
4
5
6

補足:Keysプロパティ利用時の注意点

Keysプロパティが返すICollectionは読み取り専用であり、キーの並び順は保証されていません。そのため、例1のように登録順とは異なる順序で出力されることがあります。キーの順序が重要な処理を行う場合は、SortedListやSortedDictionaryなど、順序を保持できるコレクションの使用を検討するとよいでしょう。

  1. C#でListの要素範囲を取得する方法:GetRange()メソッドの使い方

    C#のListで特定の範囲の要素を取得するには、GetRange() メソッドを使用します。このメソッドは、指定したインデックス位置から指定した数の要素を取り出し、新しいリストとして返します。 GetRange() メソッドの基本構文 public List<T> GetRange(int index, int count); index:取得を開始する要素のインデックス(0から始まります) count:取得する要素の数 リストの作成と要素の追加 まず、リストを作成して要素を追加します。 List<int> arr1 = new List<int>();

  2. 【C#】Dictionaryからキーのリストを取得する方法

    C#では、Dictionary<TKey, TValue> に格納されたすべてのキーを、List<TKey> として簡単に取り出すことができます。この記事では、Keys プロパティを使ってキーの一覧をリスト化し、画面に表示するまでの手順をサンプルコード付きで解説します。 Dictionaryに要素を追加する まずは、辞書(Dictionary)に要素を設定しましょう。 Dictionary<int, string> d = new Dictionary<int, string>(); // 辞書の要素 d.Add(1, "One&q