Pushistik↯❤
Команда форума
- Регистрация
- 6 Июл 2017
- Сообщения
- 393
- Реакции
- 97
- Баллы
- 28
[SourcePawn] Урок 9 - ADT Array (ArrayList)
<= К содержанию
ArrayList - производный тип от Handle, который являет собою автоматически расширяемый массив, позволяющий хранить в себе данные разных и почти любых типов.Размер массива увеличивается по мере добавления в него данных. Так же он уменьшается при удалении данных.
Методы для работы с ArrayList можно найти здесь ArrayList· adt_array· SourceMod Scripting API Reference
Рассмотрим их подробнее:
- Методы ArrayList
- ArrayList - Создает объект типа ArrayList
PHP:
ArrayList(int blocksize, int startsize)
- int blocksize - количество ячеек в каждом элементе массива. По умолчанию = 1.
PHP:
int iArray[X][32]; // 32 и будет значением blocksize
Например, зная что в массиве будут хранится строки, размер которых, не превышает 64 символа мы должны создать ArrayList так:PHP:ArrayList hArray = new ArrayList(ByteCountToCells(64));
- int startsize - устанавливает начальный размер массива. По умолчанию = 0.
PHP:ArrayList hArray = new ArrayList(); // Пустой массив ArrayList hArray = new ArrayList(ByteCountToCells(64)); // Пустой массив с размером элементов 64 ячейки ArrayList hArray = new ArrayList(1, 8); // Массив из 8-ми элементов равных 0, размер каждого элемента - 1 ячейка
- int blocksize - количество ячеек в каждом элементе массива. По умолчанию = 1.
- Push - Добавляет элемент в конец ArrayList. Возвращает индекс добавленного элемента.
PHP:hArray.Push(6); // Добавим в конце массива элемент со значением 6 hArray.Push(7.3); // Добавим в конце массива элемент со значением 7.3
- PushString - Добавляет элемент типа char в конец ArrayList. Возвращает индекс добавленного элемента. Если размер записываемой строки больше чем максимальный размер элемента - строка будет обрезана.
PHP:hArray.PushString("my string"); // Добавим в конце массива строку hArray.PushString("two string");
- PushArray - Добавляет элемент (массив) в конец ArrayList. Возвращает индекс добавленного элемента.
PHP:hArray.PushArray({6, 9}, 2); // 6 и 9 элементы массива, 2 - размер массива hArray.PushArray({5.2304, -3412.340, 0.35}, 3); // Таким образом можно записывать координаты или углы (float[3])
- Set - Устанавливает значение указанному элементу ArrayList.
PHP:
void Set(int index, any value, int block, bool asChar)
- int index - Индекс элемента
- any value - Значение
- int block - Индекс блока для записи (при blocksize > 0)
- bool asChar - true если записываем символ, а не значение
PHP:hArray.Set(3, 6); // Установим элементу с индексом 3 значение 6 hArray.Set(0, 7.3); // Установим элементу с индексом 0 значение 7.3 // Если массив имеет вид: ArrayList hArray = new ArrayList(3, 15); // Размер элемента = 3, Размер массива = 15. // Этот Массив предназначен для хранения координат. Если хотим изменить x координату элемента с индексом 3 hArray.Set(3, -5.001, 0); // x = 0, y = 1, z = 2 // Если хотим изменить z координату элемента с индексом 9 hArray.Set(9, 27.846, 2); // x = 0, y = 1, z = 2
- SetString - Устанавливает значение типа char элементу ArrayList.
PHP:
hArray.SetString(4, "my string 4"); // Индекс 4
- SetArray - Устанавливает массив значений элементу ArrayList.
PHP:hArray.SetArray(2, {6, 9}, 2); // Индекс 2 hArray.SetArray(7, {5.2304, -3412.340, 0.35}, 3); // Индекс 7
- Get - Получает значение элемента ArrayList.
PHP:int iVar1 = hArray.Get(3); // Индекс 3 float fVar2 = hArray.Get(7); // Индекс 7
- GetString - Получает строчное (char) значение элемента ArrayList.
PHP:char szBuffer[64]; hArray.GetString(4, szBuffer, sizeof(szBuffer)); // Индекс 4
- GetArray - Получает массив значений элемента ArrayList.
PHP:int iArray[2]; hArray.GetArray(7, iArray, 2); // Индекс 7 float fPosition[3]; hArray.GetArray(12, fPosition, 3); // Индекс 12
- Clear - Очищает ArrayList.
PHP:
hArray.Clear();
- Resize - Устанавливает размер элементов ArrayList.
PHP:
hArray.Resize(6);
- Clone - Создает копию ArrayList.
PHP:
ArrayList hArray2 = hArray.Clone(6);
- Erase - Удаляет элемент из ArrayList. Все индексы больше указанного смещаются вниз на 1 позицию.
PHP:hArray.Erase(6); // Удалим элемент с индексом 6 // Если в массиве было: // Индекс - Значение // 0 - 7 // 1 - 32.5 // 2 - 89 // 3 - 587 // 4 - 2.23 // 5 - 5.98 // Теперь если удалить элемент с индексом 2: hArray.Erase(2); // Получаем: // 0 - 7 // 1 - 32.5 // 2 - 587 // 3 - 2.23 // 4 - 5.98
- ShiftUp - Смещает все элементы ArrayList начиная с указанного на 1 индекс вверх. При этом значение этого элемента становится не определено и может содержать что угодно.
PHP:// Имеем ArrayList: // 0 - 7 // 1 - 32.5 // 2 - 89 // 3 - 587 // 4 - 2.23 // 5 - 5.98 hArray.ShiftUp(3); // Получаем: // 0 - 7 // 1 - 32.5 // 2 - 89 // 3 - Не определено // 4 - 587 // 5 - 2.23 // 6 - 5.98
- SwapAt - Меняет указанные элементы ArrayList местами.
PHP:// Имеем ArrayList: // 0 - 7 // 1 - 32.5 // 2 - 587 // 3 - 2.23 hArray.SwapAt(1, 3); // Получаем: // 0 - 7 // 1 - 2.23 // 2 - 587 // 3 - 32.5
- FindValue - Получает индекс элемента ArrayList по его значению. Возвращает -1 если элемент не найден.
Используется для поиска элементов по значению
PHP:// Имеем ArrayList: // 0 - 7 // 1 - 32.5 // 2 - 587 // 3 - 2.23 int index = hArray.FindValue(587); // index = 2
- FindString - Получает индекс элемента ArrayList по его значению (char). Возвращает -1 если элемент не найден.
Используется для поиска элементов по значению
PHP:// Имеем ArrayList: // 0 - "my string 1" // 1 - "my string 2" // 2 - "my string 3" // 3 - "my string 4" int index = hArray.FindString("my string 2"); // index = 1
- ArrayList - Создает объект типа ArrayList
- Свойства ArrayList
- Length - Получает текущий размер ArrayList
PHP:// Имеем ArrayList: // 0 - 7 // 1 - 32.5 // 2 - 587 // 3 - 2.23 int iSize = hArray.Length; // iSize = 4
- Length - Получает текущий размер ArrayList
PHP:
ArrayList g_hGlobalArray;
public void OnPluginStart()
{
g_hGlobalArray = new ArrayList(ByteCountToCells(64));
g_hGlobalArray.PushString("dfsknj234"); // Индекс 0
g_hGlobalArray.PushString("d2knj234"); // Индекс 1
g_hGlobalArray.PushString("564sdf"); // Индекс 2
g_hGlobalArray.Resize(g_hGlobalArray.Length+2); // Добавляем в конец 2 пустых элемента
g_hGlobalArray.SetString(3, "sdf812");
g_hGlobalArray.SetString(4, "bvn78se");
g_hGlobalArray.ShiftUp(3); // Сдвинем всё начиная с 3-го индекса вверх.
g_hGlobalArray.SetString(3, "fdg5641234");
int i, iSize;
char szBuffer[64];
iSize = g_hGlobalArray.Length;
PrintToServer("Size(GlobalArray) = %i", iSize);
for(i = 0; i < iSize; ++i)
{
g_hGlobalArray.GetString(i, szBuffer, sizeof(szBuffer));
PrintToServer("GlobalArray[%i] = '%s'", i, szBuffer);
}
ArrayList hLocalArray = new ArrayList(1, 4);
hLocalArray.Set(0, 10923);
hLocalArray.Set(1, 13519);
hLocalArray.Set(2, 1930);
hLocalArray.Set(3, 10878);
hLocalArray.Push(3052);
hLocalArray.Push(2060);
hLocalArray.Push(15731);
hLocalArray.Push(10282);
hLocalArray.SwapAt(4, 6);
i = hLocalArray.FindValue(1930);
if(i != -1)
{
hLocalArray.Set(3, 345);
}
iSize = hLocalArray.Length;
PrintToServer("Size(hLocalArray) = %i", iSize);
for(i = 0; i < iSize; ++i)
{
PrintToServer("hLocalArray[%i] = %i", i, hLocalArray.Get(i));
}
delete hLocalArray;
hLocalArray = new ArrayList(3);
hLocalArray.PushArray({34, 345, 13}, 3);
hLocalArray.PushArray({21, 28, 0}, 3);
hLocalArray.PushArray({86, 43, 799}, 3);
hLocalArray.Set(1, 172, 2, false); // В массиве {21, 28, 0} заменяем 0 на 172
int iArray[3];
iSize = hLocalArray.Length;
PrintToServer("Size(hLocalArray2) = %i", iSize);
for(i = 0; i < iSize; ++i)
{
hLocalArray.GetArray(i, iArray, 3);
PrintToServer("hLocalArray2[%i] = {%i, %i, %i}", i, iArray[0], iArray[1], iArray[2]);
}
delete hLocalArray;
}
PHP:
Size(GlobalArray) = 6
GlobalArray[0] = 'dfsknj234'
GlobalArray[1] = 'd2knj234'
GlobalArray[2] = '564sdf'
GlobalArray[3] = 'fdg5641234'
GlobalArray[4] = 'sdf812'
GlobalArray[5] = 'bvn78se'
Size(hLocalArray) = 8
hLocalArray[0] = 10923
hLocalArray[1] = 13519
hLocalArray[2] = 345
hLocalArray[3] = 10878
hLocalArray[4] = 15731
hLocalArray[5] = 2060
hLocalArray[6] = 3052
hLocalArray[7] = 10282
Size(hLocalArray2) = 3
hLocalArray2[0] = {34, 345, 13}
hLocalArray2[1] = {21, 28, 172}
hLocalArray2[2] = {86, 43, 799}
<= К содержанию
Последнее редактирование: