DictionaryのValue(値)をListにする
DictionaryのKeyをstringに、ValueをListにしたかったので以下のように実装しました。
冷蔵庫に入ってるものを種類別に格納しておくようなものを想定。
Listを定義してからDictionaryにAddするのはコードも長くなるのでなるだけ簡潔に追加したいなと思って以下のようにしました。
ローカル以外では初期化できなかった(UnityだけでなくC#も?)ので、publicとして使いたいものを宣言と同時に初期化で値を入れておくことはできないのかな、と思いこういうコードに。
メソッド内の初期化を忘れており、しばらくNullReferenceException: Object reference not set to an instance of an object
で怒られました。
宣言と追加
Dictionary_value_list.cs
usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassDictionary_value_list:MonoBehaviour{publicDictionary<string,List<string>>MapFridge;publicvoidSetmap(){//ローカルで初期化MapFridge=newDictionary<string,List<string>>();MapFridge.Add("野菜",newList<string>(){"きゅうり","トマト","玉ねぎ"});MapFridge.Add("果物",newList<string>(){"みかん","パイナップル","いちご"});MapFridge.Add("魚",newList<string>(){"さけ","サバ","はまち"});}}
取得と表示
Dictionary_value_list.cs
//Keyを取得して表示foreach(stringsinMapFridge.Keys){Debug.Log(s);}
Dictionary_value_list.cs
//Valueを取得して表示foreach(List<string>liinMapFridge.Values){foreach(stringsinli){Debug.Log(s);}
Dictionary_value_list.cs
//KeyとValueのPairを取得して表示foreach(KeyValuePair<string,List<string>>iteminMapFridge){Debug.Log(item.Key+"はこれがあります");foreach(stringsinitem.Value){Debug.Log(s);}}
ValueはListなのでさらにその中の要素に対してforeach。
Debug.Logはデフォルトで改行されちゃうので、同一行に出力したいときにfor文とか回してしまうと必ず改行されちゃうのが不便。
どうしても改行したくないときは、stringに連結していって最後に表示するとか。
一要素だけ取り出すときにはKeyを指定するしかなさそう。