Quantcast
Channel: dictionaryタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 99

DictionaryのValue(値)をListにする

$
0
0

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

コンソールでの表示
key.PNG

Dictionary_value_list.cs
//Valueを取得して表示foreach(List<string>liinMapFridge.Values){foreach(stringsinli){Debug.Log(s);}

コンソールでの表示
value.PNG

Dictionary_value_list.cs
//KeyとValueのPairを取得して表示foreach(KeyValuePair<string,List<string>>iteminMapFridge){Debug.Log(item.Key+"はこれがあります");foreach(stringsinitem.Value){Debug.Log(s);}}

コンソールでの表示
both.PNG

ValueはListなのでさらにその中の要素に対してforeach。
Debug.Logはデフォルトで改行されちゃうので、同一行に出力したいときにfor文とか回してしまうと必ず改行されちゃうのが不便。
どうしても改行したくないときは、stringに連結していって最後に表示するとか。

一要素だけ取り出すときにはKeyを指定するしかなさそう。


Viewing all articles
Browse latest Browse all 99

Trending Articles