Unity で Queue や Stack を使用して順番に処理を行う

シェアする

別に Unity やゲーム開発に限った話じゃないと思うけどプログラムで、配列などに入れて順番に処理したい、という事がある。最初は配列やリストのメソッドに良いの無いかなーと思って探してみたら、C# であれば Queue 及び Stack を使うと簡単に実現できる事を知った。

Queue は First In First Out と言われ先に入れたものを先に取り出す。
一方 Stack は Last in First Out もしくは First In Last Out と言われ最後に入れたものを先に取り出す。

どちらも基本的なデータ構造ですが僕が使ってた他の言語(PHP とか Ruby とか)だと配列のメソッドを組み合わせて実現するんですよね。C# ではそれぞれクラスが用意されてます。便利ですね?

というわけで使ってみよう。

Sponsored Links

Queue

Enqueue でデータ入れて Dequeue で先に入っていたものを取り出す。

以下の例では string を queue に入れているが int でも boolean でも自分で作ったクラスでもなんでもいける。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class QueueTest : MonoBehaviour {

	void Start () {
		Queue<string> queue = new Queue<string>(){};
		queue.Enqueue("kongo");
		queue.Enqueue("hiei");
		queue.Enqueue("haruna");
		queue.Enqueue("kirishima");

		Debug.Log("queue.Count:" + queue.Count);

		foreach (string name in queue) {
			Debug.Log("name:" + name);
		}

		while (queue.Count > 0) {
			Debug.Log("queue.Dequeue():" + queue.Dequeue());
		}

		Debug.Log("queue.Count:" + queue.Count);
	}
}

結果は以下のようになる。

unity-queue

先に入れた kongo から出てきてますね。

Stack

Push でデータを入れて Pop で後から入れたものを取り出す。他は queue と同様。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class StackTest : MonoBehaviour {

	void Start () {
		Stack<string> stack = new Stack<string>(){};
		stack.Push("kongo");
		stack.Push("hiei");
		stack.Push("haruna");
		stack.Push("kirishima");

		Debug.Log("stack.Count:" + stack.Count);

		foreach (string name in stack) {
			Debug.Log("name:" + name);
		}

		while (stack.Count > 0) {
			Debug.Log("stack.Pop():" + stack.Pop());
		}

		Debug.Log("stack.Count:" + stack.Count);
	}
}

queue とは逆に kirishima から出てくる。

unity-stack

わりとこういった処理は使うので覚えておくと便利だ。

Sponsored Link

シェアする

フォローする