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

【C#入門】Stack.GetEnumerator()メソッドの使い方をわかりやすく解説

C#のStack.GetEnumerator()メソッドは、Stackコレクション内の要素を順番に取り出すためのIEnumerator(列挙子)を返すメソッドです。この列挙子を使うことで、foreach文を使わずにwhile文などでスタックの要素を1つずつ処理できます。

GetEnumerator()メソッドの構文

構文は以下のとおりです。

public virtual System.Collections.IEnumerator GetEnumerator ();

戻り値として、Stackのすべての要素にアクセスできるIEnumeratorオブジェクトが返されます。なお、StackはLIFO(Last In First Out:後入れ先出し)方式のため、要素は最後に追加したものから順に取得される点に注意してください。

使用例1:数値のStackでGetEnumerator()を使う

まずは基本的な使用例を見てみましょう。

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        Stack stack1 = new Stack();
        stack1.Push(150);
        stack1.Push(300);
        stack1.Push(500);
        stack1.Push(750);
        stack1.Push(1000);
        Console.WriteLine("Stack1の要素...");
        foreach(int val in stack1){
            Console.WriteLine(val);
        }
        Stack stack2 = new Stack();
        stack2.Push(350);
        stack2.Push(400);
        stack2.Push(500);
        stack2.Push(850);
        stack2.Push(900);
        IEnumerator demoEnum = stack2.GetEnumerator();
        Console.WriteLine("Stack2の要素...");
        while (demoEnum.MoveNext()) {
            Console.WriteLine(demoEnum.Current);
        }
        Console.WriteLine("\n両方のスタックは等しいか? = "+stack1.Equals(stack2));
    }
}

実行結果

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

Stack1の要素...
1000
750
500
300
150
Stack2の要素...
900
850
500
400
350
両方のスタックは等しいか? = False

この例では、stack2に対してGetEnumerator()を呼び出してIEnumeratorを取得し、MoveNext()メソッドで次の要素へ移動しながら、Currentプロパティで現在の要素を表示しています。foreach文と同じく、後に入れた要素から順に出力されていることが確認できます。

使用例2:文字列のStackでGetEnumerator()を使う

続いて、文字列を格納したStackでの使用例です。Clone()メソッドで複製したスタックに対してGetEnumerator()を使用しています。

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        Stack stack = new Stack();
        stack.Push("Inspiron");
        stack.Push("Alienware");
        stack.Push("Projectors");
        stack.Push("Monitors");
        stack.Push("XPS");
        stack.Push("Laptop");
        stack.Push("Notebook");
        Console.WriteLine("Stackの要素...");
        foreach(string val in stack){
            Console.WriteLine(val);
        }
        Console.WriteLine("要素数 = "+stack.Count);
        Console.WriteLine("Speakersはスタックに含まれるか? = "+stack.Contains("Speakers"));
        stack.Push("Headphone");
        stack.Push("Keyboard");
        stack.Push("Earphone");
        Console.WriteLine("\nStackの要素...更新後");
        foreach(string val in stack){
            Console.WriteLine(val);
        }
        Console.WriteLine("要素数(更新後) = "+stack.Count);
        Console.WriteLine("\nAlienwareはスタックに含まれるか? = "+stack.Contains("Alienware"));
        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nStackの要素...複製後");
        IEnumerator demoEnum = stack2.GetEnumerator();
        while (demoEnum.MoveNext()) {
            Console.WriteLine(demoEnum.Current);
        }
        Console.WriteLine("要素数(更新後) = "+stack.Count);
    }
}

実行結果

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

Stackの要素...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数 = 7
Speakersはスタックに含まれるか? = False
Stackの要素...更新後
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数(更新後) = 10
Alienwareはスタックに含まれるか? = True
Stackの要素...複製後
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数(更新後) = 10

この例では、Clone()メソッドで作成したスタックのコピーに対してGetEnumerator()を呼び出し、MoveNext()とCurrentを組み合わせてすべての要素を順に表示しています。元のスタックと同じ内容がLIFO順で出力されていることがわかります。

まとめ

  • GetEnumerator()は、Stackの要素を反復処理するためのIEnumeratorを返すメソッドである。
  • MoveNext()で次の要素へ移動し、Currentプロパティで現在の要素を取得する。
  • StackはLIFO構造のため、要素は最後にPushしたものから順に列挙される。
  • foreach文でも同様の反復処理が可能だが、GetEnumerator()を直接使うとより細かい制御ができる。
  1. C#のArray.GetEnumeratorメソッドの使い方を解説

    C#のArray.GetEnumerator()メソッドは、配列(Array)に対するIEnumeratorを返すために使用されます。このメソッドを利用することで、配列内の各要素を順番に列挙し、反復処理を行うことができます。構文構文は以下のとおりです。public virtual System.Collections.IEnumerator GetEnumerator ();使用例それでは、Array.GetEnumerator()メソッドを実装した具体的な例を見てみましょう。using System; using System.Collections; public class Demo{

  2. C#のStackクラスを徹底解説!PushとPopの使い方とサンプルコード

    C#のStackクラスは、LIFO(Last-In, First-Out:後入れ先出し)方式でオブジェクトを管理するコレクションです。最後に追加した要素から順に取り出したい場合に活用されます。 Stackクラスには、以下のような便利なプロパティが用意されています。 Count … スタック内に格納されている要素数を取得します。 Push操作:スタックへの要素追加 Pushメソッドを使うと、スタックの先頭(一番上)に新しい要素を追加できます。 Stack st = new Stack(); st.Push(A); st.Push(B); st.Push(C); st.Push(D); この