C#のStackクラスのサンプルです。
目次
説明 | Stackクラスとは |
サンプル | 要素を追加する (pushメソッド) |
要素を取得してスタックから削除する (popメソッド) | |
要素を取得してスタックから削除しない (peekメソッド) |
Stackクラスとは
使用例
var color = new Stack<string>(); color.Push("red"); color.Push("blue"); |
1つの変数で複数の値を保持できます。
上記はStackクラスをインスタンス化して変数に代入しています。
この変数colorはスタックとして使用できます。
<>はジェネリクスです。変数colorの各値はstringのみセット可能です。
Stackの変数のイメージ(スタック)
スタックの機能
スタックとは、後に入れたデータが、先に取り出されることです。
「後入れ先出し」といいます。英語では LIFO(Last In First Out)です。
要素
各項目を要素(element)といいます。
1つの変数で同じ型の複数の値を保持できます。
以下はMicrosoftのStack<T> クラスのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.stack-1?view=net-6.0
要素を追加する (pushメソッド)
public void Push(T item) |
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var num = new Stack<string>();
num.Push("one");
num.Push("two");
num.Push("three");
foreach (var a in num)
{
Console.WriteLine(a);// three two one (Last In First Out)
}
num.Push("four");
foreach (var a in num)
{
Console.WriteLine(a);// four three two one (Last In First Out)
}
}
}
8行目は、Stackクラスをインスタンス化して変数に代入しています。ジェネリクス<>でオブジェクトの中身はstringであると宣言しています。
9~11,18行目は、pushメソッドで要素を追加しています。
15,22行目は、後に入れたデータが、先に取り出されています。
要素を取得してスタックから削除する (popメソッド)
public T Peek() |
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var num = new Stack<string>();
num.Push("one");
num.Push("two");
num.Push("three");
string n1 = num.Pop();
Console.WriteLine("n1=" + n1);//n1=three
foreach (var a in num)
{
Console.WriteLine(a);// two one <-削除されている
}
string n2 = num.Pop(); // twoを取得
string n3 = num.Pop(); // oneを取得
string n4 = num.Pop(); //例外が発生 Stack が空です。
}
}
13行目は、Popメソッドでスタックから要素を取得してスタックの要素を削除します。
22行目は、要素がない変数に対してPopメソッドを実行しています。「System.InvalidOperationException: Stack が空です」の例外が発生が発生します。
要素を取得してスタックから削除しない (peekメソッド)
public T Peek() |
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var num = new Stack<string>();
num.Push("one");
num.Push("two");
num.Push("three");
string n1 = num.Peek();
Console.WriteLine("n1=" + n1);//n1=three
foreach (var a in num)
{
Console.WriteLine(a);// three two one
}
}
}
13行目は、Peekメソッドでスタックから要素を取得しています。
Popメソッドと違いスタックの要素を削除しません。
関連の記事