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

C#のSortedSetクラスとは?主要なプロパティ・メソッドと使い方を実例付きで解説

C#のSortedSet<T>クラスは、要素が常にソートされた順序(昇順)で維持されるコレクションを表すジェネリッククラスです。System.Collections.Generic名前空間に属し、重複する要素は自動的に除外されるため、順序付きの一意なデータ集合を扱いたい場合に非常に便利です。

この記事では、SortedSetクラスの主なプロパティとメソッドを一覧形式で整理し、実際のコード例とその実行結果もあわせて紹介します。

SortedSetクラスの主なプロパティ

SortedSetクラスには、以下のようなプロパティが用意されています。

No.プロパティと説明
1Comparer
SortedSet<T>内の値を並べ替えるために使用されているIComparer<T>オブジェクトを取得します。
2Count
SortedSet<T>に格納されている要素の数を取得します。
3Max
比較子(comparer)によって定義された順序における、SortedSet<T>内の最大値を取得します。
4Min
比較子によって定義された順序における、SortedSet<T>内の最小値を取得します。

SortedSetクラスの主なメソッド

次に、よく使われる代表的なメソッドを紹介します。

No.メソッドと説明
1Add(T)
セットに要素を追加し、正常に追加できたかどうかを示すbool値を返します。既に存在する要素の場合はFalseが返されます。
2Clear()
セットからすべての要素を削除します。
3Contains(T)
セットに特定の要素が含まれているかどうかを判定します。
4CopyTo(T[])
SortedSet<T>全体を、互換性のある1次元配列の先頭からコピーします。
5CopyTo(T[], Int32)
SortedSet<T>全体を、互換性のある1次元配列の指定したインデックス位置からコピーします。
6CopyTo(T[], Int32, Int32)
SortedSet<T>から指定した数の要素を、互換性のある1次元配列の指定したインデックス位置へコピーします。
7CreateSetComparer()
個々のセットを格納するコレクションを作成する際に利用できるIEqualityComparerオブジェクトを返します。

このほかにも、IsSupersetOf()やGetEnumerator()など、セット操作や列挙のための便利なメソッドが多数提供されています。

サンプルコード①:特定の要素が含まれているか確認する

まず、Contains()メソッドを使って、SortedSetに特定の要素が含まれているかどうかを確認する例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
    public static void Main() {
        SortedSet<string> set1 = new SortedSet<string>();
        set1.Add("CD");
        set1.Add("CD");
        set1.Add("CD");
        set1.Add("CD");
        Console.WriteLine("SortedSet1の要素...");
        foreach (string res in set1) {
            Console.WriteLine(res);
        }
        Console.WriteLine("SortedSet1に要素DEは含まれているか? = " + set1.Contains("DE"));
        SortedSet<string> set2 = new SortedSet<string>();
        set2.Add("BC");
        set2.Add("CD");
        set2.Add("DE");
        set2.Add("EF");
        set2.Add("AB");
        set2.Add("HI");
        set2.Add("JK");
        Console.WriteLine("SortedSet2の要素...");
        foreach (string res in set2) {
            Console.WriteLine(res);
        }
        Console.WriteLine("SortedSet2はSortedSet1のスーパーセットか? = " + set2.IsSupersetOf(set1));
    }
}

出力結果

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

SortedSet1の要素...
CD
SortedSet1に要素DEは含まれているか? = False
SortedSet2の要素...
AB
BC
CD
DE
EF
HI
JK
SortedSet2はSortedSet1のスーパーセットか? = True

この例から分かるように、set1に"CD"を4回追加しても、セットには1つしか登録されません。これがSortedSetの「重複排除」の動作です。また、IsSupersetOf()メソッドにより、set2がset1のすべての要素を含んでいること(スーパーセットであること)がTrueとして判定されています。

サンプルコード②:EnumeratorでSortedSetを走査する

続いて、GetEnumerator()メソッドで取得できる列挙子(Enumerator)を使って、SortedSetの各要素を順番に取り出す方法を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
    public static void Main(){
        SortedSet<string> set1 = new SortedSet<string>();
        set1.Add("AB");
        set1.Add("BC");
        set1.Add("CD");
        set1.Add("EF");
        Console.WriteLine("SortedSet1の要素...");
        foreach (string res in set1) {
            Console.WriteLine(res);
        }
        SortedSet<string> set2 = new SortedSet<string>();
        set2.Add("BC");
        set2.Add("CD");
        set2.Add("DE");
        set2.Add("EF");
        set2.Add("AB");
        set2.Add("HI");
        set2.Add("JK");
        Console.WriteLine("SortedSet2の要素(Enumeratorを使用)...");
        SortedSet<string>.Enumerator demoEnum = set2.GetEnumerator();
        while (demoEnum.MoveNext()) {
            string res = demoEnum.Current;
            Console.WriteLine(res);
        }
    }
}

出力結果

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

SortedSet1の要素...
AB
BC
CD
EF
SortedSet2の要素(Enumeratorを使用)...
AB
BC
CD
DE
EF
HI
JK

注目すべき点は、要素を追加した順序に関係なく、出力が常にアルファベット順(ソート済みの順序)になっていることです。これはSortedSetクラスが内部で自動的に並べ替えを行っているためです。

まとめ

C#のSortedSet<T>クラスは、「ソート順の維持」と「重複の排除」という2つの特徴を持つ強力なコレクションです。MaxやMinプロパティによる最大値・最小値の高速な取得や、IsSupersetOf()などの集合演算メソッドも備えており、順序付きの一意データを効率的に管理したい場面で活躍します。HashSetとの違い(順序の有無)を理解した上で、用途に応じて使い分けるとよいでしょう。

  1. C#のConsoleクラスとは?主要プロパティの使い方を実例付きで解説

    C#のConsoleクラスは、コンソールアプリケーションにおける標準入力・標準出力・標準エラー出力の各ストリームを表すクラスです。テキストの表示や入力の読み取りだけでなく、文字色や背景色の変更、カーソル位置やサイズの制御など、コンソール操作に関するさまざまな機能が提供されています。ここでは、Consoleクラスの代表的なプロパティの使い方を、サンプルコードと実行結果とあわせて解説します。Console.CursorLeftプロパティコンソール上のカーソル位置(左端から数えた列位置)を変更するには、Console.CursorLeftプロパティを使用します。サンプルコードusing System

  2. C#のSortedListクラスとは?特徴と基本的な使い方を解説

    SortedListクラスとは C#のSortedListクラスは、配列とハッシュテーブルを組み合わせたコレクションです。キーと値のペアからなるリストを保持しており、各要素には「キー」または「インデックス」のどちらからでもアクセスできます。 インデックスを使ってアクセスすればArrayListのように振る舞い、キーを使ってアクセスすればHashtableのように振る舞います。最大の特徴は、コレクション内の項目が常にキーの値に基づいて自動的にソートされるという点です。また、キーは重複できず、各キーには1つの値のみが対応します。 例:SortedListに要素を追加する Add()メソッドを使う