Запись во вложенный словарь в Unity3D - PullRequest
0 голосов
/ 31 августа 2018

Могу ли я не записывать значения в мой вложенный словарь напрямую?

Было бы хорошо, если бы я мог получить к нему доступ так:

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 друг за другом?

1 Ответ

0 голосов
/ 31 августа 2018

Значит ли это, что я должен вставлять свои ключи друг за другом?

Да, вам нужно инициализировать каждый по порядку:

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
        }
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...