|
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
|
|||||||||||
Проблема с одинаковыми элементами списка15.11.2018, 22:16. Показов 3203. Ответов 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
Разделение строки с одинаковыми элементами Матрицы. Строка с одинаковыми элементами. |
|
293 / 256 / 107
Регистрация: 26.10.2012
Сообщений: 806
|
|
| 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
|
|
|
293 / 256 / 107
Регистрация: 26.10.2012
Сообщений: 806
|
||
| 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
|
|
|
293 / 256 / 107
Регистрация: 26.10.2012
Сообщений: 806
|
|
| 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
|
||
|
293 / 256 / 107
Регистрация: 26.10.2012
Сообщений: 806
|
||||||
| 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
Матрицы с одинаковыми элементами в углах?! Вывести номера строк с одинаковыми элементами Создание матрицы со всеми одинаковыми элементами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|