English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Stack(スタック)

Stackは特別な集合タイプで、LIFO(後進先出)方式で要素を保存します。C#にはジェネリックのStack<T>と非ジェネリックのStackコレクションクラスが含まれています。ジェネリックのStack<T>コレクションを使用することをお勧めします。

スタックはLIFO形式で一時データを保存するのに非常に役立ち、要素の値を取得した後にそれを削除したい場合があります。

Stack <T>の特性

  • Stack<T>はLIFO(後進先出)の集合です。  

  • それはSystem.Collection.Generic名前空間下にあります。

  • Stack<T>は指定されたタイプの要素を含むことができます。それにより、コンパイル時のタイプチェックが提供され、ボックス化は実行されません。/デキャッシングは、それはジェネリックであるためです。

  • Push()メソッドを使用して要素を追加できます。コレクション初期化(collection)を使用することはできません。-initializer)文法。

  • Pop()とPeek()メソッドを使用して要素を検索できます。インデクサーはサポートされていません。

スタックの作成

Stack<T>が格納する要素のタイプに型引数を指定して作成するオブジェクトです。以下の例では、Push()メソッドを使用してStack <T>に要素を追加します。スタックはnull(参照型)と重複値を許可します。

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
foreach(var item in myStack)
     Console.Write(item + "," //プリント4,3,2,1、

次のように、配列からスタックを作成することもできます。

int[] arr = new int[]{ 1, 2, 3, 4};
Stack<int> myStack = new Stack<int>(arr);
foreach(var item in myStack)
     Console.Write(item + "," //プリント4,3,2,1、

Stack <T> 属性とメソッド:

属性使用法
Countスタック内の要素の総数を返します。
メソッド使用法
Push(T)プロジェクトをスタックの先頭に挿入します。
Peek()スタックの先頭のプロジェクトを返します。
Pop()プロジェクトをスタックの先頭から削除し、返します。
Contains(T)スタックにプロジェクトが存在するか確認します。
Clear()スタックからすべてのプロジェクトを削除します。

Pop()

Pop()メソッドは、最後の要素を返し、それをスタックから削除します。スタックが空の場合はInvalidOperationExceptionが発生します。したがって、Pop()メソッドを呼び出す前に、常にスタック内の要素数を確認してください。

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
Console.Write("スタック内の要素数: {0}", myStack.Count);
while(myStack.Count > 0)
     Console.Write(myStack.Pop(), + ","
Console.Write("スタック内の要素数: {0}", myStack.Count);
出力:
スタック内の要素数:4
4,3,2,1、
スタック内の要素数:0

Peek()

Peek()メソッドは、スタックから最後に追加された値を返しますが、それを削除しません。空のスタックでPeek()メソッドを呼び出すとInvalidOperationExceptionが発生します。したがって、Peek()メソッドを使用して要素を検索する前に、常にスタック内の要素を確認してください。

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
Console.Write("スタック内の要素数: {0}", myStack.Count);// 出力 4
if(myStack.Count > 0){
     Console.WriteLine(myStack.Peek()); // 出力 4
     Console.WriteLine(myStack.Peek()); // 出力 4
}
Console.Write("スタック内の要素数: {0}", myStack.Count);// 出力 4

Contains()

Contains() メソッドは指定された要素が Stack コレクションに存在するかどうかを確認します。存在する場合、true を返し、存在しない場合、false を返します。

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Contains(2); // true を返す
myStack.Contains(10); // false を返す