Я пишу код для обработки запасов предметов для игры, в которой хранятся предметы. Каждый инвентарь имеет свойство 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, поэтому я считаю, что сложность не имеет значения, потому что это действительно очень мало усилий. Также обратите внимание, что мы не можем изменить дизайн игры, только аспект сервера.