今回はデータ構造のひとつであるスタックをC#で使ってみようと思います。
スタックは最後に登録したデータから取り出す事が出来るので、鞄に持ち物を入れていき取りだす時は最後に入れた物からといったデータを扱いたい時に便利です。
スタックのイメージは
↑のような感じになります。
今回もUnity付属のMonoDevelopを使用してStackについて勉強していきます。
Stackを使う
それではStackについて見ていきましょう。
Stackの宣言
Stackの宣言はQueueやList等と同じようにデータの型を指定して宣言します。
1 2 3 | Stack<GameObject> stackObj = new Stack<GameObject>(); |
↑の例では、登録したいデータの型を指定して宣言し、インスタンスの生成をしています。
スタックへのデータの登録
スタックへのデータ登録をするにはPushメソッドを使用します。
1 2 3 | stackObj.Push (obj); |
Pushメソッドの引数に登録するデータを指定します。
スタックからデータを取りだす
スタックからデータを取りだすにはPopメソッドを使用します。
1 2 3 | var obj = stackObj.Pop (); |
Popメソッドの戻り値で取りだしたデータを取得出来、その時にスタックからそのデータも削除されます。
取りだすデータはスタックに最後に登録したデータになります。
スタックからデータを削除せずに取り出す
Queueと同じようにPeekメソッドを使用すればスタックからデータを削除せずに取り出す事が出来ます。
1 2 3 | var obj = stackObj.Peek (); |
取りだすデータはスタックに最後に登録したデータになります。
スタックデータのクリア
スタックデータを全て削除するにはClearメソッドを使用します。
1 2 3 | stackObj.Clear(); |
スタックにデータが存在するかどうか
スタックのデータに指定したデータが存在するかどうかはContainsメソッドを使用します。
1 2 3 | stackObj.Contains (obj) |
Containsメソッドの引数に指定したデータが存在すればtrue、存在しなければfalseを戻り値として得られます。
スタックのデータ登録数
スタックに登録されているデータの数はCountプロパティで調べる事が出来ます。
1 2 3 | stack.Count |
Stackを使った簡単なサンプル
Stackの使い方について学んだところで、簡単なサンプルを作成してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | using UnityEngine; using System.Collections; using System.Collections.Generic; public class StackTest : MonoBehaviour { Stack<int> stack = new Stack<int>(); // Use this for initialization void Start () { stack.Push (0); stack.Push (1); stack.Push (50); foreach (var item in stack) { Debug.Log ("スタックしたデータ: " + item); } int popValue = stack.Pop (); Debug.Log ("ポップしたデータ: " + popValue); foreach (var item in stack) { Debug.Log ("ポップした後のデータ: " + item); } int peekValue = stack.Peek (); Debug.Log ("Peekした値: " + peekValue); foreach (var item in stack) { Debug.Log ("Peek後のスタックのデータ: " + item); } // スタックデータのクリア stack.Clear (); // スタックにデータが含まれているかどうか Debug.Log("スタックに25が含まれているか? " + stack.Contains (25)); // スタックに登録されているデータ数 Debug.Log("スタックに登録されているデータ数: " + stack.Count); } } |
サンプルの内容は説明がいらないほどシンプルなので実行して、コンソールに出力される結果を確認してみてください。