C# における Dictionary とは、Key と Value の値をセットで扱う連想配列です。
List や Array の場合はインデックス番号と値をセットで扱いますが、Dictionary ではインデックス番号の代わりに Key を使って値を取り出します。1つの Dictionary に同じ Key を登録することはできません。
Dictionary を使う際は、名前空間に System.Collections.Generic
の宣言が必要です。
using System.Collections.Generic;
本記事では Dictionary の要素を foreachを使い、key と value、key のみ、value のみなど、様々な組み合わせで繰り返し取得する方法を紹介します。
目次
Dictionary を foreach で取得する
Dictionary で foreach を使ったサンプルコードを以下に記載します。
foreach で回すと、KeyValuePair<T, T> 構造体でキーと値の要素が取得できます。Key を取得したい場合は <変数名>.Key
にアクセスし、Value を取得したい場合は <変数名>.Value
にアクセスします。
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
var testDic = new Dictionary<string, string>();
testDic.Add("Tokyo", "Tokyo");
testDic.Add("Hyogo", "Kobe");
testDic.Add("Okinawa", "Naha");
// foreach で Dictionary の要素を順番に取得
foreach (var keyValuePair in testDic)
{
string key = keyValuePair.Key;
string value = keyValuePair.Value;
Debug.Log($"key:{key}, value:{value}");
}
}
}
出力結果
key:Tokyo, value:Tokyo
key:Hyogo, value:Kobe
key:Okinawa, value:Naha
別の方法として、タプル型による要素の取得も可能です。
foreach (var (key, value) in testDic)
{
Debug.Log($"key:{key}, value:{value}");
}
このタプルを使った構文は Visual Studio 2017(C# 7)で導入されました。
Dictionary で Key のみを取得する方法
Dictionary の Key のみを取得するサンプルコードを以下に記載します。
foreach で Dictionary を指定するときに <Dictionary の変数名>.Keys
で Key のみの要素を取得することができます。
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
var testDic = new Dictionary<string, string>();
testDic.Add("Tokyo", "Tokyo");
testDic.Add("Hyogo", "Kobe");
testDic.Add("Okinawa", "Naha");
foreach (var key in testDic.Keys)
{
Debug.Log($"key:{key}");
}
}
}
出力結果
key:Tokyo
key:Hyogo
key:Okinawa
Dictionary で Value のみを取得する方法
Dictionary の Value のみを取得するサンプルコードを以下に記載します。
foreach で Dictionary を指定するときに <Dictionary の変数名>.Values
で Value のみの要素を取得することができます。
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
var testDic = new Dictionary<string, string>();
testDic.Add("Tokyo", "Tokyo");
testDic.Add("Hyogo", "Kobe");
testDic.Add("Okinawa", "Naha");
foreach (var value in testDic.Values)
{
Debug.Log($"value:{value}");
}
}
}
出力結果
value:Tokyo
value:Kobe
value:Naha
参考資料
関連記事
【C#】配列, List, Dictionary の初期化方法まとめ