Pushistik↯❤
Команда форума
- Регистрация
- 6 Июл 2017
- Сообщения
- 393
- Реакции
- 97
- Баллы
- 28
[SourcePawn] Урок 10 - ADT Trie (StringMap)
<= К содержанию
StringMap - производный тип от Handle, который являет собою автоматически расширяемый массив, позволяющий хранить в себе данные разных и почти любых типов.Размер массива увеличивается по мере добавления в него данных. Так же он уменьшается при удалении данных.
Основным отличием от ADT Array (ArrayList) является то, что запись и обращение к элементам массива происходит не по индексам, а по ключам.
Ключ - уникальная строка. Для каждого ключа может сущевствовать только 1 элемент.
Методы для работы с StringMap можно найти здесь StringMap· adt_trie SourceMod Scripting API Reference
Рассмотрим их подробнее:
- Методы StringMap
- StringMap - Создает объект типа StringMap
PHP:
StringMap hTrie = new StringMap();
- SetValue - Добавляет элемент в StringMap. Возвращает true в случае успеха.
PHP:hTrie.SetValue("ключ 1", 6); hTrie.SetValue("ключ 2", 7.3); // В качестве ключа мы можешь использовать любые значения, которые нам удобно.
- bool replace - Если установлено true, то при совпадении ключа значение для него будет перезаписано. По умолчанию = true.
- SetString - Добавляет элемент типа char в StringMap. Возвращает true в случае успеха.
PHP:hTrie.SetString("ключ 1", "my string"); hTrie.SetString("ключ 2", "two string");
- SetArray - Добавляет массив в StringMap. Возвращает true в случае успех
PHP:hTrie.SetArray("ключ 1", {6, 9}, 2); // 6 и 9 элементы массива, 2 - размер массива hTrie.SetArray("ключ 2", {5.2304, -3412.340, 0.35}, 3); // Таким образом можно записывать координаты или углы (float[3])
- Get - Получает значение из StringMap. Возвращает true в случае успеха.
PHP:int iVar1; if(hTrie.GetValue("ключ 1", iVar1)) { // ... } float fVar2; if(hTrie.GetValue("ключ 2", fVar2)) { // ... }
- GetString - Получает строчное (char) значение из StringMap. Возвращает true в случае успеха.
PHP:char szBuffer[64]; hTrie.GetString("ключ 1", szBuffer, sizeof(szBuffer)); // Индекс 4
- GetArray - Получает массив из StringMap. Возвращает true в случае успеха.
PHP:int iArray[2]; hTrie.GetArray("ключ 1", iArray, 2); // Размер массива = 2 float fPosition[3]; hTrie.GetArray("ключ 2", fPosition, 3); // Размер массива = 3
- Clear - Очищает StringMap.
PHP:
hTrie.Clear();
- Remove - Удаляет значение из StringMap.
PHP:
hTrie.Remove("ключ 2");
- Snapshot - Создает для StringMap вспомогательный тип StringMapSnapshot.
PHP:
StringMapSnapshot hTrieSnapshot = hTrie.Snapshot();
- StringMap - Создает объект типа StringMap
Методы StringMapSnapshot:
- GetKey - Получает имя ключа по его индексу.
- KeyBufferSize - Получает размер буфера необходимый для получения ключа (Размер+1).
- Свойство Length - Получает количество ключей.
При этом нельзя создать объект типа StringMapSnapshot как любой другой. Его можно только получить из объекта типа StringMap.
- Свойства StringMap
- Length - Получает количество элеметов в StringMap
PHP:// Имеем StringMap: // "key0" - 7 // "key1" - 32.5 // "key2" - 587 // "key3" - 2.23 int iSize = hTrie.Size; // iSize = 4
- Length - Получает количество элеметов в StringMap
PHP:
public void OnPluginStart()
{
StringMap hTrie = new StringMap();
hTrie.SetString("key 1", "dfsknj234");
hTrie.SetString("key 2", "d2knj234");
hTrie.SetString("key 3", "564sdf");
hTrie.SetValue("int_ket", 1930);
hTrie.SetArray("arr_key", {4, 6, 2}, 3);
hTrie.Remove("int_ket");
hTrie.Remove("arr_key");
hTrie.SetString("key 5", "dffsk234dafnj234");
hTrie.SetString("key 8", "d2kn324123j234");
hTrie.SetString("key 9", "fghds");
StringMapSnapshot hTrieSnapshot = hTrie.Snapshot();
int i, iSize;
char szBuffer[64], szKey[32];
iSize = hTrieSnapshot.Length;
PrintToServer("Size(hTrieSnapshot) = %i", iSize);
for(i = 0; i < iSize; ++i)
{
hTrieSnapshot.GetKey(i, szKey, sizeof(szKey));
PrintToServer("hTrieSnapshot[%i] = '%s'", i, szKey);
hTrie.GetString(szKey, szBuffer, sizeof(szBuffer));
PrintToServer("hTrie[%s] = '%s'", szKey, szBuffer);
}
delete hTrie;
}
PHP:
Size(hTrieSnapshot) = 6
hTrieSnapshot[0] = 'key 1'
hTrie[key 1] = 'dfsknj234'
hTrieSnapshot[1] = 'key 2'
hTrie[key 2] = 'd2knj234'
hTrieSnapshot[2] = 'key 3'
hTrie[key 3] = '564sdf'
hTrieSnapshot[3] = 'key 5'
hTrie[key 5] = 'dffsk234dafnj234'
hTrieSnapshot[4] = 'key 8'
hTrie[key 8] = 'd2kn324123j234'
hTrieSnapshot[5] = 'key 9'
hTrie[key 9] = 'fghds'
<= К содержанию
Последнее редактирование: