【C#】Dictionary の要素を foreach で順番に取得する方法

Dictionary の要素を foreach で順番に取得する方法

はじめに

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の初期化方法まとめ 【C#】配列, List, Dictionary の初期化方法まとめ