|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
|||||||||||
Проблема с одинаковыми элементами списка15.11.2018, 22:16. Показов 3253. Ответов 13
В данный момент я использую словарь(Dictionary<int, int>, key - id предмета, value - кол-во предмета), но как известно он не может хранить два одинаковых ключа, как поступить, если в качестве ключа используется id предмета в базе данных(ScriptableObject).
При добавлении предмета в словарь происходит проверка на наличие ключа, если нет, я его добавляю, если есть, я прибавляю значение(value) предмета, но что делать когда количество предмета достигнет максимума? (int maxStack в Item) Есть идея вместо словаря использовать два списка, List<int> items и List<int> counts, но проблема в доступе к предметам, так как id предмета не будет соответсвовать индексу листа. Подскажите прямую и гладкую дорогу. Item.cs:
0
|
|||||||||||
| 15.11.2018, 22:16 | |
|
Ответы с готовыми решениями:
13
Разделение строки с одинаковыми элементами Матрицы. Строка с одинаковыми элементами. |
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
|
| 16.11.2018, 09:43 | |
|
Почему бы в класс Slot не добавить ссылку на item, которую он содержит (или не содержит) и количество itemCount этих предметов.
Инвентарь будет содержать список этих слотов.
0
|
|
|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
|
| 16.11.2018, 10:45 [ТС] | |
|
jetyb, слот содержит ссылку на drag, в котором содержаться ссылка на item и count.
Добавлено через 53 секунды Drag создаётся когда предмет добавляется и т.д.
0
|
|
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
||
| 16.11.2018, 11:35 | ||
Сообщение было отмечено NotGoodEnough как решение
Решение
Не понимаю.
Инвентарь содержит список слотов, каждый слот знает какую item и сколько он содержит. Может быть несколько слотов с одними и теми же item-ами(типа стаки зелей). Этого достаточно для реализации функций public bool Add(int id, int count) public bool Remove(int id, int count) public bool GetItemCount(int id) В случае Add пробегаемся по всем слотам, пустым или с item-ами такого типа, суммируем число свободных мест в них. Если места хватает, то добавляем в свободные или подобные слоты предметы. В случае Remove проверяем через GetItemCount число item-ов в инвентаре, а затем пробегаемся по всем слотам и удаляем из них item. В обоих функциях по-любому надо пробежаться по всем слотам, и Dictionary<int, int> items не нужен. Функцию же GetItemCount можно реализовать и без Dictionary<int, int> items. Да, выполняться она будет помедленнее. Но ведь добавление\удаление предметов в инвентарь - разовая операция, которая не вызывается часто. Там вам по-любому придется и интерфейс инвентаря обновлять. Можно конечно же и завести свой private Dictionary<int, int> itemCounts для быстрой работы функции GetItemCount. Модифицировать этот словарь только в методах Add/Remove/Load.
1
|
||
|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
|||
| 16.11.2018, 14:07 [ТС] | |||
|
Я писал только про то, что словарь не может содержать одинаковых ключей. Добавлено через 1 минуту
0
|
|||
|
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
|
|
| 16.11.2018, 14:13 | |
|
Что-то я не понял в чем проблема? Нужно запретить добавление если предметов больше чем maxCount?
Не проще ли хранить словарь типа <int, Item>, где ключ ид, значение - сам предмет. В класс итем добавить поле с количеством предметов на данный момент.
0
|
|
|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
||
| 16.11.2018, 15:03 [ТС] | ||
|
1max1, суть в том, что при достижении какого-либо предмета собственного maxCount нужно чтобы создался другой такой же предмет, в другом слоте.
Добавлено через 3 минуты Ещё jetyb, как я понял, предлагал использовать один элемент в словаре для нескольких слотов, но я не знаю на сколько это будет удобно. Изначально я предпологал использование одного элемента словаря для одного слота, но сейчас у меня есть сомнения в удобстве.
0
|
||
|
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
|
||
| 16.11.2018, 15:04 | ||
|
0
|
||
|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
|
| 16.11.2018, 15:31 [ТС] | |
|
0
|
|
|
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
|
|
| 16.11.2018, 15:42 | |
|
А если добавить в класс итем поле, с номером слота, где он лежит?
0
|
|
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
|
| 16.11.2018, 15:58 | |
|
Я писал, что для организации инвентаря и всех его функций достаточно:
1. хранить в инвентаре список слотов 2. в каждом слоте хранить ссылку на item и число этих item-ов в слоте
1
|
|
|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
||
| 16.11.2018, 16:24 [ТС] | ||
|
jetyb, я же говорю, что у меня есть item и count в скрипте drag, который нужен для перемещения предметов по инвентарю, не создавать же мне новый драг каждый раз когда я захочу переместить предмет в другой слот.
Добавлено через 2 минуты 1max1,
0
|
||
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
||||||
| 16.11.2018, 19:45 | ||||||
1
|
||||||
|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
|
| 17.11.2018, 14:27 [ТС] | |
|
jetyb, буду смотреть
0
|
|
| 17.11.2018, 14:27 | |
|
Помогаю со студенческими работами здесь
14
Матрицы с одинаковыми элементами в углах?! Вывести номера строк с одинаковыми элементами Создание матрицы со всеми одинаковыми элементами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
|