adt_array.inc - разные типы данных в массиве
|
_wS_
|
Дата: Воскресенье, 21.10.2012, 18:56:49 | Сообщение # 1 |
|
Может хранить разные типы данных: массивы, строки, числа и тд. Доступ к элементам осуществляется по индексам, как и в обычных массивах.
Handle:CreateArray(blocksize=1, startsize=0);
Code Создает динамический глобальный массив ячеек (может расти и уменьшаться). Работает медленнее, чем обычный массив.
blocksize - размер, количество ячеек для каждого элемента, как new xz[][размер] (нельзя изменить после создания) startsize - индекс, позиция первого элемента (начало) ClearArray(Handle:array);
Code Удаляет все элементы, очищает массив - то же, что и ResizeArray(0) Handle:CloneArray(Handle:array);
Code Делает точную копию массива и возвращает новое Handle. Копия и оригинал - никак не связаны между собой. bool:ResizeArray(Handle:array, newsize);
Code Изменение размера массива. Если размер меньше текущего размера, то массив усекается. 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);
Code Получить (int, float, Handle, byte)
block = блок для чтения (полезно, если его размер > 0) asChar = читать как байт (необязательно) GetArrayString(Handle:array, index, String:buffer[], maxlength);
Code Получить строку. Возвращает количество символов в строке. 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);
Code Сдвигает элементы вправо на 1 шаг, начиная с index. В итоге размер массива увеличивается на 1 и текущее значение в позиции index становится неопределенным. RemoveFromArray(Handle:array, index);
Code Удаляет элемент из массива по индексу. Те индексы, которые правее, смещаются влево на 1 шаг. SwapArrayItems(Handle:array, index1, index2); - меняет местами элементы
FindStringInArray(Handle:array, const String:item[]);
Code Ищет строку в массиве и возвращает ее индекс-позицию, или -1, если не найдена FindValueInArray(Handle:array, any:item)
Code Работает как и FindStringInArray, только ищет (int, float, Handle, byte) Код для теста:
Code 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); // строка обрезана, т.к. массив создан с маленьким размером }
|
|
| | |
TEIN
|
Дата: Воскресенье, 17.02.2013, 10:22:19 | Сообщение # 2 |
 |
Сообщений: 568
Репутация: 78 [ +/- ]
|
|
Вопросы в файле
|
|
| | |
_wS_
|
Дата: Воскресенье, 17.02.2013, 15:10:18 | Сообщение # 3 |
|
Вопросы писать нужно прямо здесь - поиск/помощь другим - не для тебя одного же, у кого-то такие же вопросы.
Цитата new Handle:ar = CreateArray(): new String:str[][] = {"test_array", "test", "super_test"}; PushArrayString(ar, str);
Вопрос 1. Как добавить str в массив сразу, то есть не по отдельности? PushArrayArray(ar, str, sizeof(str)); - так пробуй, или цикл:
PushArrayString(ar, str[0]); PushArrayString(ar, str[1]); PushArrayString(ar, str[N]);
Цитата Вопрос 2. Как можно искать строки в массиве без учета регистра? FindStringInArray - разве там есть что-то о регистре? Нет. Значит нельзя, ищет с учетом регистра.
|
|
| | |
panorama
|
Дата: Пятница, 22.11.2013, 13:11:22 | Сообщение # 4 |
 |
Сообщений: 206
Репутация: 2 [ +/- ]
|
|
Еще вопрос возможно ли взять последний символ из строки ? Как например в php Код $kod = substr("Последняя буква а", -1);// Вернет "а" Также и в sourcespawn есть что-нибудь ?
|
|
| | |
_wS_
|
Дата: Пятница, 22.11.2013, 14:08:27 | Сообщение # 5 |
|
Так наверн
Код new String:s[] = "abcd"; PrintToServer("%c", s[strlen(s)-1]);
|
|
| | |
panorama
|
Дата: Пятница, 22.11.2013, 14:34:37 | Сообщение # 6 |
 |
Сообщений: 206
Репутация: 2 [ +/- ]
|
|
Цитата _wS_ (  ) Так наверн
Код new String:s[] = "abcd"; PrintToServer("%c", s[strlen(s)-1]); Спасибо !
|
|
| | |
Valeriks
|
Дата: Пятница, 26.09.2014, 18:06:36 | Сообщение # 7 |
 |
Сообщений: 101
Репутация: 3 [ +/- ]
|
|
Чего-то я вообще не втыкаю... допустим Код h_Chisla // есть переменная в которой меняются числа
new Handle:ar = CreateArray(); PushArrayCell(ar, h_Chisla); // записываем наши числа из переменой h_Chisla в ar а как дальше проверить есть ли там нужное нам число из всей кучи?
так Код new h_resultat = FindValueInArray(ar, h_Chisla); if(h_resultat == h_Chisla) PrintToChatAll("%d", h_resultat); Или может есть другие способы, гораздо проще?
п.с. Мне просто нужно чтобы все числа из переменной записывались, и при необходимости я мог бы проверить есть такое число. Если повтор, отбрасываем.. если нет, записываем и т.д.
|
|
| | |
Sallcom
|
Дата: Пятница, 26.09.2014, 21:59:01 | Сообщение # 8 |
 |
Сообщений: 206
Репутация: 31 [ +/- ]
|
|
Цитата Valeriks (  ) п.с. Мне просто нужно чтобы все числа из переменной записывались, и при необходимости я мог бы проверить есть такое число. Если повтор, отбрасываем.. если нет, записываем и т.д.
Код #include <sourcemod>
public OnMapStart(){ new Handle:hArray = CreateArray(), iNumber = 123456887;
while(iNumber > 0){ if(FindValueInArray(hArray, iNumber%10) == -1) PushArrayCell(hArray, iNumber%10); iNumber /= 10; } }
Сообщение отредактировал Sallmap - Пятница, 26.09.2014, 23:46:13 |
|
| | |
Valeriks
|
Дата: Суббота, 27.09.2014, 14:33:39 | Сообщение # 9 |
 |
Сообщений: 101
Репутация: 3 [ +/- ]
|
|
Благодарю за разъяснения. Буду пробовать.
|
|
| |
|