Какой подход лучше улучшить сложность с помощью словарей? - PullRequest
0 голосов
/ 25 марта 2020

Я пишу код для обработки запасов предметов для игры, в которой хранятся предметы. Каждый инвентарь имеет свойство MaxSlots, которое указывает, сколько предметов он может хранить. Как только он достигнет максимального значения, пользователь не сможет добавить к нему больше элементов.

В игре есть Оборудованный инвентарь, который содержит экипированные предметы для персонажа, и обычный инвентарь, в котором находятся предметы. Оба инвентаря могут содержать предметы, но экипированный представляет только предметы, которые визуально экипированы для персонажа.

Каждый предмет имеет свойство Slot, которое указывает, где предмет находится внутри инвентаря. В игре экипированные инвентарные запасы имеют отрицательные слоты, чтобы различать экипированные и обычные инвентарные запасы.

Подход 1:

public Dictionary<short, Item> Inventory { get; private set; }

Таким образом, вы можете добавлять предметы, и свойство действует как обычный. и оснащенный инвентарь, но если индекс отрицательный, то вы знаете, что предмет экипирован.

Подход 2:

public Dictionary<InventoryType, Dictionary<short, Item>> Inventory { get; private set; }

Когда пользователь хочет добавить новый предмет, нам нужно проверить если инвентарь достиг своей емкости. Мой друг говорит, что его путь (подход № 2) лучше, потому что сложность проверить счетчик O(1), а мой O(N), потому что я должен проверить, является ли ключ отрицательным, например:

Inventory.Where(i => i.Key < 0).Count

Какой подход лучше и прав ли он? Обратите внимание, что максимальное количество предметов, которое может хранить пользователь, составляет 100, поэтому я считаю, что сложность не имеет значения, потому что это действительно очень мало усилий. Также обратите внимание, что мы не можем изменить дизайн игры, только аспект сервера.

...