C#でコレクションからStackを作成する方法をわかりやすく解説
C#では、Stack<T>クラスのコンストラクタに既存のコレクションや配列を渡すだけで、その要素を持った新しいスタックを簡単に作成できます。この記事では、int型とstring型の2つのサンプルコードを使いながら、具体的な手順と実行結果をわかりやすく解説します。
Stack<T>クラスの基本
Stack<T>は、LIFO(Last In, First Out:後入れ先出し)という方式で要素を管理するジェネリックコレクションです。主なメソッドは次のとおりです。
- Push() … スタックの先頭に要素を追加する
- Pop() … 先頭の要素を取り出して削除する
- Peek() … 先頭の要素を削除せずに参照する
- ToArray() … スタックの内容を配列に変換する
さらに、コンストラクタにIEnumerable<T>型のオブジェクト(配列やListなど)を渡すと、その要素をすべて格納した新しいスタックが生成されます。
サンプル1:int型のStackから新しいStackを作成する
最初の例では、100から1000までの数値をPushしたスタックを用意し、ToArray()メソッドで取得した配列をもとに、別の新しいスタックを作成しています。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
Stack<int> stack = new Stack<int>();
stack.Push(100);
stack.Push(200);
stack.Push(300);
stack.Push(400);
stack.Push(500);
stack.Push(600);
stack.Push(700);
stack.Push(800);
stack.Push(900);
stack.Push(1000);
Console.WriteLine("スタックの要素...");
foreach(int val in stack){
Console.WriteLine(val);
}
Console.WriteLine("\n配列から作成したスタックの要素...");
Stack<int> arr = new Stack<int>(stack.ToArray());
foreach(int val in arr){
Console.WriteLine(val);
}
}
}実行結果
スタックの要素... 1000 900 800 700 600 500 400 300 200 100 配列から作成したスタックの要素... 100 200 300 400 500 600 700 800 900 1000
実行結果のポイント
元のスタックをforeachで列挙すると、最後に追加した「1000」から順に出力されます。これはStackがLIFO構造であるためです。
一方、ToArray()で得られる配列は「先頭=スタックの頂上」という並びになっています。この配列をコンストラクタに渡すと、要素が先頭から順にPushされていくため、新しく作られたスタックは元のスタックと逆順に列挙される点に注意してください。
サンプル2:string型のStackから新しいStackを作成する
次に、文字列を扱う例を見てみましょう。考え方はint型の場合とまったく同じで、任意の型に対して同じ手法を適用できます。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
Stack<string> stack = new Stack<string>();
stack.Push("Katie");
stack.Push("Andy");
stack.Push("Ariane");
stack.Push("Justin");
Console.WriteLine("スタックの要素...");
foreach(string val in stack){
Console.WriteLine(val);
}
Console.WriteLine("\n配列から作成したスタックの要素...");
Stack<string> arr = new Stack<string>(stack.ToArray());
foreach(string val in arr){
Console.WriteLine(val);
}
}
}実行結果
スタックの要素... Justin Ariane Andy Katie 配列から作成したスタックの要素... Katie Andy Ariane Justin
まとめ
- Stack<T>のコンストラクタに配列やコレクションを渡すと、その要素を含む新しいスタックが作成できる
- ToArray()メソッドを使えば、既存のスタックから手軽に配列へ変換できる
- コンストラクタ経由で生成したスタックは、元のスタックと逆の順序で列挙される点に注意が必要
-
C#のStackクラスとは?使い方と基本操作をわかりやすく解説
C#のStackクラスは、要素を「後入れ先出し(LIFO:Last-In, First-Out)」の形式で管理するためのコレクションです。最後に追加した要素が最初に取り出されるという特性を持つため、履歴管理や元に戻す(Undo)処理など、特定の順序でデータを扱いたい場面で活用されます。 Stackの基本操作:Push と Pop Stackでは、要素を追加することを「プッシュ(Push)」、要素を取り出すことを「ポップ(Pop)」と呼びます。 Push:スタックの一番上に新しい要素を追加する Pop:スタックの一番上から要素を取り出して削除する Stackクラスの使用例 まず、Stackに
-
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); この