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

avuremybe, как тебе такой вариант?
	function HaveItem takes unit shop, integer itemid returns boolean
		return LoadBoolean(ht, GetUnitUserData(shop), itemid)
	endfunction

	function ShopAddItem takes unit shop, integer itemid returns nothing
		if not HaveItem(shop, itemid) then
			//...
			set lastItem = lastItem + 1
			call SaveInteger(ht, GetUnitUserData(shop), lastItem, itemid)
			call SaveBoolean(ht, GetUnitUserData(shop), itemid, true)
			//...
		endif
	endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
26
pro100master, что? Какие функции брать?
21
avuremybe, думаю, Вам стоит показать, как у вас реализована БД.
26
ScopteRectuS, а что, через хэш она может быть реализована разными методами?
SaveInteger( hashtable, parentKey, StringHash("I"+I2S(i)), integer)
30
avuremybe, хеш-таблица позволяет сохранять данные, как эти данные в таблице организованы определяет только сам разработчик.
Кроме того, функция StringHash() весьма медленная, лучше использовать GetHandleId() от контекстной сущности.

Касательно вопроса. Как вариант - можно завести массив, который будет хранить каждый childKey и бегать с проверкой по нему.
26
Clamp, то есть вариантов кроме перебора нет?
30
avuremybe, если опишешь, как и для чего используется БД, то мб появится.
28
avuremybe, если бд хранит равкоды то записывай по равкоду в хэш булен
и потом проверяй его
ну а вообще кламп дело говорит
бд в студию
26
Clamp, так ведь описал же. В БД хранятся целые числа. Вопрос стоит в том, каким методом, кроме перебора я могу проверять, лежит в этой БД конкретное число или нет.
Т.е. у меня есть какие-то данные
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(1)), 'U000')
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(2)), 'U001')
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(3)), 'U002')
и если я хочу туда добавить, например 'U001', то хотелось бы знать, может он там уже есть.
local itemCount=3
local i=1
loop
    exitwhen i>itemCount
    if (LoadInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(i)))=='U001') then
    ...
    endif
    set i=i+1
endloop

StringHash() я на целые числа заменю, не вопрос. Но это текущую задачу не решает =\
30
Что мешает использовать сами эти числа в качестве childKey и просто сохранять туда boolean true? Тогда можно добавлять сколько угодно раз, по сути будет перезаписыватся единственная ячейка.
Как и указал нвц
26
Clamp, это наполнение магазинов/инвентарей. Нужна последовательная нумерация.
Иначе у меня страница магазина будет формироваться туеву хучу времени.
30
В таком случае название "БД" неуместно, в рантайме из базы данных значения только выгружаются.
Делай структурами и храни данные в них, это будет и удобнее, и проще.
Кроме того, при заполнении можно создавать каждому магазину/инвентарю свой пул всех доступных предметов и переносить предметы из него, а не копировать.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.