【Unity C#】Dictionary型にforeachを使う方法は?InvalidOperationExceptionが出る場合の回避方法も

プログラミング

C#のDictionary型は、キーと値のペアでデータを管理する便利なコレクションです。データを効率的に検索・操作できるため、多くの場面で活躍します。本記事では、Dictionary型の基本的な使い方から、foreachループを活用してデータを操作する方法を詳しく解説します。

こんな方にオススメ!

  • Dictionary型を初めて使う人
  • foreachループの実践的な使い方を学びたい方
  • Dictionary型の値を変更しようとしたらエラーが出る

Dictionary型の基本知識

Dictionaryは、キー(Key)と値(Value)のペアを持つコレクションです。キーを指定すると対応する値を参照できます。値は何度でも変更できますが、キーは一度設定したら変えられません。

以下に基本的な使い方を示します。

using System.Collections.Generic;
using UnityEngine;

public class DictionaryExample : MonoBehaviour
{
    // Dictionary型を定義: 整数のキー(int)と文字列の値(string)を持つ
    public Dictionary<int, string> Dic = new Dictionary<int, string>();

    public void AddData()
    {
        // 辞書にキーと値を追加
        Dic.Add(0, "Sunday");
        Dic.Add(1, "Monday");
        Dic.Add(2, "Tuesday");
        Dic.Add(3, "Wednesday");
    }
}
  • Dic.Add(key, value)を使ってデータを追加。
  • キーは一意である必要があり、重複すると例外が発生します。

foreachループの基礎

foreachループを使うと、Dictionary内のデータを簡単に処理できます。

キーと値のペアを取得する方法

以下のコードは、すべてのキーと値を出力する例です。

foreach (var pair in Dic)
{
    Debug.Log("Key: " + pair.Key + ", Value: " + pair.Value);
}

・実行結果:

Key: 0, Value: Sunday
Key: 1, Value: Monday
Key: 2, Value: Tuesday
Key: 3, Value: Wednesday

KeysプロパティとValuesプロパティの活用

Dictionaryには、キーだけ、または値だけを取り出すプロパティがあります。

すべてのキーを取得

foreach (var key in Dic.Keys)
{
    Debug.Log("Key: " + key);
}

すべての値を取得

foreach (var value in Dic.Values)
{
    Debug.Log("Value: " + value);
}

・実行結果:

 ・Keys: 0, 1, 2, 3

 ・Values: Sunday, Monday, Tuesday, Wednesday

実用例: Dictionaryの値を一括更新

foreachループを使って、すべての値を一括で更新する方法を見てみましょう。

foreach (var key in Dic.Keys.ToList())
{
    Dic[key] = "holiday";
}

foreach (var pair in Dic)
{
    Debug.Log("Key: " + pair.Key + ", Value: " + pair.Value);
}

・実行結果:

Key: 0, Value: holiday
Key: 1, Value: holiday
Key: 2, Value: holiday
Key: 3, Value: holiday

なぜToList()が必要?

foreachの処理中にコレクションを変更させようとするとエラーが発生するようになっています。これはforeachを適切に処理するためです。

そのため.ToList()で複製させてください。複製しても値は変更されます。

エラー:InvalidOperationException: Collection was modified; enumeration operation may not execute.

foreachループの注意点

キーの重複は禁止:
 Dictionary内で同じキーを持つデータを追加しようとすると例外が発生します。

列挙中の変更に注意:
 直接辞書を変更するとエラーになるため、ToList()などを活用しましょう。

パフォーマンス:
 非常に大きな辞書では、ループの回数や操作がパフォーマンスに影響を与える場合があります。

まとめ

この記事では、C#のDictionary型を使ったforeachループの基本と応用を解説しました。キーと値を効率的に操作する方法を学ぶことで、データ処理がよりスムーズになるはずです。

次は、実際にDictionaryを使ったアプリケーションを作成しながら、学んだ内容を活用してみてください!

コメント

タイトルとURLをコピーしました