[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » adt_array.inc - разные типы данных в массиве (CreateArray Взято с world-source.ru)
adt_array.inc - разные типы данных в массиве
rootДата: Воскресенье, 03.02.2013, 00:32 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
Может хранить разные типы данных: массивы, строки, числа и тд. 
Доступ к элементам осуществляется по индексам, как и в обычных массивах. 

Handle:CreateArray(blocksize=1, startsize=0); 

Код
Создает динамический глобальный массив ячеек (может расти и уменьшаться).  
Работает медленнее, чем обычный массив.  

blocksize - размер, количество ячеек для каждого элемента, как new xz[][размер] (нельзя изменить после создания)  
startsize - индекс, позиция первого элемента (начало)

ClearArray(Handle:array); 

Код
Удаляет все элементы, очищает массив - то же, что и ResizeArray(0)

Handle:CloneArray(Handle:array); 

Код
Делает точную копию массива и возвращает новое Handle. Копия и оригинал - никак не связаны между собой.

bool:ResizeArray(Handle:array, newsize); 

Код
Изменение размера массива. Если размер меньше текущего размера, то массив усекается.  
newsize - количество элементов в массиве

GetArraySize(Handle:array) - возвращает количество элементов в массиве 

PushArrayCell(Handle:array, any:value); - добавляет в конец массива значение (int, float, Handle, byte) 
PushArrayString(Handle:array, const String:value[]); - строку 
PushArrayArray(Handle:array, const any:values[], size=-1); - массив (size = кол-во элементов в массиве) 

any:GetArrayCell(Handle:array, index, block=0, bool:asChar=false); 

Код
Получить (int, float, Handle, byte)  

block = блок для чтения (полезно, если его размер > 0)  
asChar = читать как байт (необязательно)

GetArrayString(Handle:array, index, String:buffer[], maxlength); 

Код
Получить строку. Возвращает количество символов в строке.

GetArrayArray(Handle:array, index, any:buffer[], size=-1); - получить массив 

SetArrayCell(Handle:array, index, any:value, block=0, bool:asChar=false); - изменть значение в массиве 
SetArrayString(Handle:array, index, const String:buffer[]); - изменить значение (строку) в массиве 
SetArrayArray(Handle:array, index, const any:values[], size=-1); - массив 

ShiftArrayUp(Handle:array, index); 

Код
Сдвигает элементы вправо на 1 шаг, начиная с index.  
В итоге размер массива увеличивается на 1 и текущее значение в позиции index становится неопределенным.

RemoveFromArray(Handle:array, index); 

Код
Удаляет элемент из массива по индексу. Те индексы, которые правее, смещаются влево на 1 шаг.

SwapArrayItems(Handle:array, index1, index2); - меняет местами элементы 

FindStringInArray(Handle:array, const String:item[]); 

Код
Ищет строку в массиве и возвращает ее индекс-позицию, или -1, если не найдена

FindValueInArray(Handle:array, any:item) 

Код
Работает как и FindStringInArray, только ищет (int, float, Handle, byte)

Код для теста: 

Код
public OnPluginStart()  
{  
      new Handle:ar = CreateArray();  
      PushArrayCell(ar, 5);  
      PushArrayCell(ar, 12345.07);  
      PushArrayString(ar, "music");  

      PrintToServer("элементов в массиве: %d\n", GetArraySize(ar));  

      PrintToServer("index 0 = %d", GetArrayCell(ar, 0));  
      PrintToServer("index 1 = %f", Float:GetArrayCell(ar, 1));  

      decl String:info[7]; GetArrayString(ar, 2, info, 7);  
      PrintToServer("index 2 = %s", info); // строка обрезана, т.к. массив создан с маленьким размером  
}
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » adt_array.inc - разные типы данных в массиве (CreateArray Взято с world-source.ru)
  • Страница 1 из 1
  • 1
Поиск: