Показать сообщение отдельно
Старый 28.09.2011, 12:26   #6
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: [Вопрос] Оптимизация поиска в листе

Сообщение от Greymem Посмотреть сообщение
Спасибо за наглядный пример.
Всегда рад

Сообщение от Greymem Посмотреть сообщение
Интересно а как занести в переменную скажем 200 элементов? =) Это-же все равно придется создавать массив, лист или такую структуру?
Ну это главная особенность хеш таблицы, что в неё можно занести абсолютно всё. Даже ещё одну хеш таблицу
map.Insert("My Map", new TMap)
map.Insert("My List", new TList

И еще вопрос, если не возражаете, как можно обновить данные по ключу? тоже INSERT или сначала удалить ключ, а потом снова создать? Последний проблемный.
Да, именно так.
Local key:String = "Object39"
If map.Contains(key) Then map.Remove(key)
map.Insert(key, newObject)
Где newObject - новый объект
Когда мы вызываем Remove удаляется не только ключ, но и значение.
К сожалению тут происходит двойной поиск:
map.Contains(key) и map.Remove(key)
Этого можно избежать только работая напрямую с Node (звено хеш таблици)
Примерно так:
Local key:String = "Object39"
Local node:TNode = map._FindNode(key)
node._value = newObject
Собственно node содержит и _key(ключ) и _value(сам объект).
Но с методами/переменными, которые начинаются с "_" надо поострожнее. Это так сказать стиль писания на BlitzMax так как в нём нет инкапсуляции - приватные методы и поля начинают с нижнего подчёркивания.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Greymem (28.09.2011)