MRが楽しい

MRやVRについて学習したことを書き残す

C#でToDictionaryを使ってリストからDictionaryを作成する

本日はC#の小ネタ枠です。
C#でToDictionaryを使ってリストからDictionaryを作成する手順です。

Enumerable.ToDictionary

Enumerable.ToDictionaryメソッドはIEnumerable型からDictionary型を作成します。
作成時に指定された値のキーが重複した場合は例外が発生します。
learn.microsoft.com

List<DictionaryData> dataList = default;

// リストからDictionary型を作成する
Dictionary<int, DictionaryData> dataDictionary = dataList.ToDictionary(data => data.id);

サンプルスクリプト

キー検索のアクセスを高速化するため、初回アクセス時にリストをDictionary型に変換して保持するサンプルスクリプトを作成しました。
・ToDictionaryTest.cs

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class ToDictionaryTest : MonoBehaviour
{
    [Serializable]
    private class DictionaryData
    {
        public int id;
        public string name;
    }
    
    [SerializeField]
    private List<DictionaryData> dataList = default;
    
    // アクセス時にリストから参照用のDictionaryを作成する
    private Dictionary<int, DictionaryData> dataDictionary = default;
    private Dictionary<int, DictionaryData> DataDictionary => dataDictionary ??= dataList.ToDictionary(data => data.id);
    
    void Start()
    {
        for(int checkId = 0; checkId < 10; checkId++)
        {
            var data = DataDictionary[checkId];
            Debug.Log($"id: {data.id}, name: {data.name}");
        }
    }
}

以下の通り、リストをDictionary型に変換した変数から値を取得できました。

なお指定した値のキーが重複していた場合はArgumentExceptionの例外が発生します。