为了账号安全,请及时绑定邮箱和手机立即绑定

在 Unity3D 中写入嵌套字典

在 Unity3D 中写入嵌套字典

C#
慕无忌1623718 2021-12-25 16:52:25
我不能直接将值写入我的嵌套字典吗?如果我能像这样访问它会很好:public Dictionary<string, Dictionary<string, Dictionary<string, int>>> planets =    new Dictionary<string, Dictionary<string, Dictionary<string, int>>>();planets[Planet.CharacterId]["MetalMine"]["Level"] = 0;但我得到:KeyNotFoundException: 字典中不存在给定的键。这是否意味着我必须Keys互相插入?
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

这是否意味着我必须依次插入我的密钥?


是的,您需要按顺序初始化每个:


planets[Planet.CharacterId] = new Dictionary<string, Dictionary<string, int>>();

planets[Planet.CharacterId]["MetalMine"] = new Dictionary<string, int>();

planets[Planet.CharacterId]["MetalMine"]["Level"] = 0;

您可以在此处使用集合初始值设定项语法,但这不会使内容更具可读性和可维护性。


您似乎最好使用一个类,而不是字典的字典:


public class Planet

{

    public List<Mine> Mines { get; set; }

}


public class Mine

{

    public string Type { get; set; }

    public int Level { get; set; }

}


var planets = new Dictionary<string, Planet>();


planets[Planet.CharacterId] = new Planet

{

    Mines = new List<Mine>

    {

        new Mine

        {

            Type = "Metal",

            Level = 0

        }

    };

}


查看完整回答
反对 回复 2021-12-25
?
撒科打诨

TA贡献1934条经验 获得超2个赞

它可能有帮助或嵌套字典替代。

创建 Sample.cs 脚本并对其进行测试。


 public Dictionary<string,Tuple<string,string,string,int>> _planets = new Dictionary<string, Tuple<string,string, string, int>>();

void Start()

    {

       

       string myKey = string.Concat("1","MetalMine","Level");

       if(!_planets.ContainsKey(myKey))

       {

           _planets.Add(myKey,Tuple.Create("1","MetalMine","Level",0));

       }

       Debug.Log("_planets mykey "+myKey+" ==> "+_planets[myKey].Item4);

    }


查看完整回答
反对 回复 2021-12-25
  • 2 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信