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

C#でSortedSetを反復処理する列挙子(Enumerator)を取得する方法

C#のSortedSetで列挙子を取得して反復処理する

SortedSet<T>クラスには、コレクションを反復処理するための列挙子を返すGetEnumerator()メソッドが用意されています。この列挙子を利用すると、foreach文を使わずに、MoveNext()メソッドとCurrentプロパティを組み合わせて要素を1つずつ取り出すことができます。

SortedSetは要素を常にソートされた状態で保持するため、列挙子で取り出される要素も必ず昇順に並びます。

GetEnumerator()メソッドの基本的な使い方

GetEnumerator()メソッドは、SortedSet<T>.Enumerator型の構造体を返します。反復処理の流れは以下の通りです。

  1. GetEnumerator()を呼び出して列挙子を取得する
  2. MoveNext()メソッドで次の要素へ進む(次の要素が存在すればtrueを返す)
  3. Currentプロパティで現在の要素を取得する

例1:文字列の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の要素(列挙子を使用)...");
        SortedSet<string>.Enumerator demoEnum = set2.GetEnumerator();
        while (demoEnum.MoveNext()) {
            string res = demoEnum.Current;
            Console.WriteLine(res);
        }
    }
}

出力結果

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

上記のコードでは、set1は通常のforeach文で反復処理しています。一方、set2ではGetEnumerator()メソッドで明示的に列挙子を取得し、whileループの中でMoveNext()とCurrentを使って要素を順番に表示しています。

注目すべき点として、set2への追加順序は「BC、CD、DE、EF、AB、HI、JK」ですが、出力結果は昇順にソートされた「AB、BC、CD、DE、EF、HI、JK」になっています。これはSortedSetが常に要素をソート済みの状態で管理しているためです。

例2:整数のSortedSetで列挙子を使用する

続いて、int型のSortedSetに対して同じ手法を適用した例を見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
    public static void Main() {
        SortedSet<int> set1 = new SortedSet<int>();
        set1.Add(100);
        set1.Add(200);
        set1.Add(300);
        set1.Add(400);
        set1.Add(500);
        set1.Add(600);
        set1.Add(700);

        Console.WriteLine("SortedSetの要素(列挙子を使用)...");
        SortedSet<int>.Enumerator demoEnum = set1.GetEnumerator();
        while (demoEnum.MoveNext()) {
            int res = demoEnum.Current;
            Console.WriteLine(res);
        }
    }
}

出力結果

SortedSetの要素(列挙子を使用)...
100
200
300
400
500
600
700

まとめ

SortedSetを反復処理する列挙子を取得するには、GetEnumerator()メソッドを使用します。戻り値のEnumerator構造体に対してMoveNext()で次の要素へ移動し、Currentプロパティでその要素を読み取ることで、foreach文と同等の反復処理を実現できます。なお、列挙子は読み取り専用であり、これを通じてコレクションの内容を変更することはできない点に注意してください。

  1. C#でDictionaryを反復処理する列挙子を取得する方法(GetEnumeratorの使い方)

    C#のDictionary<TKey, TValue>クラスでは、GetEnumerator()メソッドを呼び出すことで、ディクショナリ内のキーと値のペアを順番に走査する列挙子(Enumerator)を取得できます。戻り値はIDictionaryEnumerator型として扱うことができ、MoveNext()メソッドで次の要素へ移動しながら、KeyプロパティとValueプロパティでそれぞれキーと値を読み取ります。 例1:int型のキーを持つDictionaryの場合 まずは、キーがint型・値がstring型のディクショナリを作成し、列挙子を使って全要素を表示する基本例を見てみま

  2. C#でStringCollectionを反復処理する列挙子(Enumerator)を取得する方法

    StringCollectionを反復処理するための列挙子(Enumerator)を取得するには、GetEnumerator()メソッドを使用します。このメソッドはStringEnumerator型のオブジェクトを返し、MoveNext()とCurrentを組み合わせることで、コレクション内の各要素に順番にアクセスできます。基本的な使い方まずは、配列の要素をStringCollectionに追加し、列挙子を使って反復処理する例を見てみましょう。using System; using System.Collections.Specialized; public class Demo { &nbs