Как создать словарь из двух списков, который совместим с iOS и другими платформами Unity?

1

В некоторых документах Unity я читал, что Dictionary не является сериализуемым, поэтому его нельзя изменить из редактора. Был намек на использование двух List, а затем их использование для создания Dictionary:

Подсказка: Unity не будет сериализовать словарь, однако вы можете сохранить список <> для ключей и список <> для значений и сшить их в несериализованном словаре на Awake().

Однако я, похоже, не могу найти документацию для этого. Пока у меня есть следующее:

public List<string> someKeys;
public List<Sprite> someValues;

private void Awake()
{
    someDictionary = new Dictionary<string, Sprite>();
}

someKeys и someValues настраиваются и заполняются в редакторе Unity с тем же количеством элементов. Естественно, элемент 0 someKeys является ключом для элемента 0 в someValues, как и остальные остальные ключи по порядку. Как я могу теперь использовать их для создания ключей и значений в someDictionary?

Обновление: из повторяющихся отметок видно, что на этот вопрос был дан ответ Linq, который, будучи новичком на С#, я еще не использовал, но, безусловно, кажется, что он выполняет эту работу. Но будет ли это безопасным в Unity, особенно на таких устройствах, как iOS? Кроме того, будет ли этот метод лучше (т.е. быстрее и/или считается лучшей практикой, чем использование стандарта for цикла?

Примечание. Я хочу получить доступ к Sprite в someValues по их ключу, а не по числовому индексу.

  • 1
    Для каждого индекса n в списке добавьте n-й ключ и n-ное значение в словарь.
  • 0
    Я думаю, что вместо словаря из двух списков, список словаря будет в порядке.
Показать ещё 1 комментарий
Теги:
unity3d
dictionary

1 ответ

3
Лучший ответ

Класс Dictionary - это общий класс с аргументом первого типа, соответствующим типу ключей и аргументу второго типа, типу значений.

Поэтому словарь должен выглядеть так: Dictionary<string, Sprite>

Затем вы можете добавить пару Dictionary.Add(key, value) метода Dictionary.Add(key, value).

Итак, здесь у вас будет:

for (int numItem = 0; numItem < someKeys.Count; numItem++)
    dictionary.Add(someKeys[numItem], somevalues[numItem]);

Но сначала убедитесь, что someKeys.Count == someValues.Count.

Вы также можете использовать LINQ, но похоже, что iOS может иметь ограниченную поддержку LINQ (см. Использование LINQ при построении для iOS - Unity Answers)

  • 0
    Я начинаю думать, что это было бы лучшим решением, чем использование Linq при разработке для множества платформ (например, iOS) из того, что я уже готов о поддержке в Интернете. Я буду следить за любыми другими обновлениями - хотя не ожидайте многого, так как он был помечен как дублированный.
  • 0
    @ LeonardChallis Да, именно поэтому я использовал словари. В противном случае я очень большой поклонник LINQ: D И он больше не помечается как дублированный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню