サイトアイコン Lonely Mobiler

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

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

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

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

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

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); } }

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

先に入れた 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 から出てくる。

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

Sponsored Link
モバイルバージョンを終了