2023年7月1日土曜日

C#Dictionaryを文字配列型に変換してシリアライズ可能にする

unityC#のハッシュテーブルのDictionaryは直接シリアライズできません。

Dictionaryをゲームで保存したい場合は以下の方法があります。

  1. 手間大 Dictionaryクラスをシリアライズ可能に書き換える
  2. 手間中 DictionaryをXMLに変換して保存する
  3. 手間小 Dictionaryを文字配列に変換する

3番の文字配列に変換のサンプルです

 //using System.Collections.Generic;

            //Dictionaryを二つの文字型一次配列に変換する

            Dictionary<string, string> dic = new Dictionary<string, string>

            {

                { "1", "いち" },

                { "2", "に" },

                { "3", "さん" }

            };

          

            //変換する配列を作成する

            string[] keys = new string[dic.Keys.Count];

string[] vals = new string[dic.Values.Count];

//二つの配列に変換する

dic.Values.CopyTo(vals, 0);

dic.Keys.CopyTo(keys, 0);

Dictionary<string, string> newDic = new Dictionary<string, string>();

toDictiotnary(keys, vals, newDic);

Debug.Log(newDic["2"]);

public void toDictiotnary(string[] keys, string[] vals, Dictionary<string, string>  dic)

    {

if (keys.GetLength(0) == vals.GetLength(0))

        {

for(int i = 0; i < keys.GetLength(0); i++)

            {

dic[keys[i]] = vals[i];

}

        }

    }

結果

所感

ディグショナリは便利ですがC#の仕様が固いです。

ハッシュテーブルはディグショナリと互換がありますが推奨されていません。

public Dictionary<string, string> d1,d2;

ディグショナリはハッシュテーブルと互換性があるので簡単に置き換えられます。

0 件のコメント:

コメントを投稿