C#のStack.ToArray()メソッドとは?使い方をサンプルコード付きで解説
C#のStack.ToArray()メソッドとは
C#におけるStack.ToArray()メソッドは、System.Collections名前空間のStackクラスに用意されているメソッドで、スタックの全要素を新しい配列(object型の1次元配列)にコピーするために使用します。元のスタック自体は変更されず、配列の要素順序はスタックと同じく、最後に追加された要素が先頭に来る点が特徴です。
構文
Stack.ToArray()メソッドの構文は以下のとおりです。
public virtual object[] ToArray ();
引数は不要で、戻り値としてスタックの要素のコピーを格納したobject[]型の配列が返されます。
サンプルコード①:文字列のスタックを配列へコピーする
それでは、実際の使用例を見てみましょう。この例では、文字列を格納したスタックを作成し、Stack.Synchronized()で生成した同期化ラッパー経由でToArray()メソッドを呼び出しています。
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 elements...");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("Count of elements = "+stack.Count);
stack.Push("Ultrabook");
stack.Push("Cameras");
stack.Push("Keyboards");
Console.WriteLine("\nStack elements...updated");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("\nCount of elements (updated) = "+stack.Count);
Console.WriteLine("Is the Stack synchronized? = "+stack.IsSynchronized);
Stack stack2 = Stack.Synchronized(stack);
Console.WriteLine("Is the Stack synchronized? = "+stack2.IsSynchronized);
Console.WriteLine("\nCopying the Stack to a new array...");
Object[] objArr = stack2.ToArray();
foreach(Object ob in objArr) {
Console.WriteLine(ob);
}
}
}
このプログラムを実行すると、次のような出力が得られます。
Stack elements... Notebook Laptop XPS Monitors Projectors Alienware Inspiron Count of elements = 7 Stack elements...updated Keyboards Cameras Ultrabook Notebook Laptop XPS Monitors Projectors Alienware Inspiron Count of elements (updated) = 10 Is the Stack synchronized? = False Is the Stack synchronized? = True Copying the Stack to a new array... Keyboards Cameras Ultrabook Notebook Laptop XPS Monitors Projectors Alienware Inspiron
実行結果のポイント
- スタックはLIFO(Last-In-First-Out:後入れ先出し)構造のため、要素は最後にPushしたものから順に表示されます。
- 元のスタックの
IsSynchronizedはFalseですが、Stack.Synchronized()で作成したラッパーはスレッドセーフであり、Trueが返されます。 - ToArray()メソッドで取得した配列にも、スタックと同じ順序で要素がコピーされていることが確認できます。
サンプルコード②:数値のスタックを配列へコピーする
続いて、整数値を格納したスタックを配列にコピーする例を見てみましょう。
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push(150);
stack.Push(300);
stack.Push(500);
stack.Push(750);
stack.Push(1000);
stack.Push(1250);
stack.Push(1500);
stack.Push(2000);
stack.Push(2500);
Console.WriteLine("Stack elements...");
foreach(int val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("Count of elements = "+stack.Count);
stack.Push(3000);
stack.Push(3500);
stack.Push(4000);
Console.WriteLine("\nStack elements...updated");
foreach(int val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("\nCount of elements (updated) = "+stack.Count);
Console.WriteLine("\nCopying the Stack to a new array...");
Object[] objArr = stack.ToArray();
foreach(Object ob in objArr) {
Console.WriteLine(ob);
}
Console.WriteLine("\nCount of elements in array = "+objArr.Length);
}
}
このプログラムを実行すると、次のような出力が得られます。
Stack elements... 2500 2000 1500 1250 1000 750 500 300 150 Count of elements = 9 Stack elements...updated 4000 3500 3000 2500 2000 1500 1250 1000 750 500 300 150 Count of elements (updated) = 12 Copying the Stack to a new array... 4000 3500 3000 2500 2000 1500 1250 1000 750 500 300 150 Count of elements in array = 12
実行結果のポイント
- 合計12個の要素をPushした後にToArray()メソッドを呼び出すと、配列の長さ(
Length)も12となり、すべての要素が正しくコピーされていることがわかります。 - コピー後も元のスタックはそのまま利用できるため、用途に応じて配列とスタックを使い分けることが可能です。
まとめ
Stack.ToArray()メソッドを使えば、スタックの内容を簡単にobject型の配列へ複製できます。LIFO構造の特性上、配列の先頭には最後に追加した要素が格納される点に注意しましょう。スタックのデータをforeachループで処理したり、配列を前提とした他のAPIに渡したりしたい場合などに役立つ便利なメソッドです。
-
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); この