Unity C# DictionaryとListの使いかた(ざっくり)
みなさん、こんにちは。ぽうひろです。
今日はC#プログラミングで役に立つDictionaryとListについて説明します。
どちらもメモリにデータを保存する入れ物になりますが、
Dictionaryは key(検索キー)とvalue(値)をセットで保存するもの。
Listは順序を持った配列のようなものになります。
Dictionary作成の例
public class Field { //ステージ番号 public int stageNo; //フィールド番号 public int fieldNo; //位置 public Vector3 pos; //角度 public float rot; //ボス名 public int bossNo = 0; //セリフシーンNo public int sceneNo = 0; //ボス public bool isBoss = false; public static void InitDic(){ //Dictionary初期化 Dictionary<int,Field> dic = new Dictionary<int,Field> (); //データ2件登録 dic.Add (1, new Field{stageNo = 1, fieldNo=1, pos = new Vector3 (-15.0f, 0f, 5.0f), rot = -90f, bossNo = 0 , sceneNo = 1}); dic.Add (2, new Field{stageNo = 1, fieldNo=2, pos = new Vector3 (-35.0f, 0f, 5.0f), rot = -90f, bossNo = 0 , sceneNo = 0}); } }
InitDicというメソッドでDictionaryを初期化し(new)ています。
<int, Field>となっている部分はジェネリックと呼ばれ、最初がキーの型、2つ目がValueの型を指し示しています。
Addでデータを登録していますが、第一引数がキーになる値、第二引数がValueになるFieldクラスのデータを登録しています。
データの取り出しはdic[キー]で取得できます。1と2をキーにして登録しましたので、dic[1]、dic[2]などで取り出せます。
キーはstringも使えますので、dic["field1"]のようにPHPの連想配列っぽく使うこともできます。
続いてListの例です。
//リスト初期化 List<Field> fields = new List<Field>(); //データ2件登録 fields.Add (new Field{stageNo = 1, fieldNo=1, pos = new Vector3 (-15.0f, 0f, 5.0f), rot = -90f, bossNo = 0 , sceneNo = 1}); fields.Add (new Field{stageNo = 1, fieldNo=2, pos = new Vector3 (-35.0f, 0f, 5.0f), rot = -90f, bossNo = 0 , sceneNo = 0});
Listもジェネリックで登録する値の型を指定できます。
keyはありませんので、ジェネリックは1つだけです。
Addはリストの先頭(インデックス番号は0)から追加されていきます。
データの取り出しはインデックス番号指定になります。
上記の例ですとfields[0]、fields[1]のように指定して取得できます。
これらを応用して、Dictionaryに登録したデータから条件にマッチするデータだけをListで取り出すメソッドを書いてみると、こうなります。(stageNoにマッチするFieldデータをリストで取り出す)
public static List<Field> getFieldList(int stageNo){ List<Field> result = new List<Field>(); foreach (Field field in fieldDic.Values) { if (field.stageNo == stageNo) { result.Add (field); } } return result; }
foreach (Field field in fieldDic.Values) の部分で、Dictionaryに登録されたデータをループ処理することができます。
if (field.stageNo == stageNo) { でstageNoが引数と同じ時、resultリストにAddしています。
駆け足ですが、DictionaryとListの使い方についてまとめてみました。
この2つを使いこなすと、いろいろなデータを扱いやすくなりますので、ぜひトライしてみてください。
それでは、良いインディー開発ライフを!