Koka | Дата: Вторник, 19.05.2009, 05:17:06 | Сообщение # 1 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| Дайте учебник по или подскажите пару наглядных плагинов с их использованием И еще, правда что celltrie ищет слово в огромном массиве быстрее чем обычный перебор for(new i=0; i<?; i++) ?? либо (для не ленивых ) и тех кто работает с этими инклудами - напишите плз пару простых примерчиков как вставлять, искать, удалять, очищать (и что там можно еще полезного делать) эти массивы ps: т.к. правила форума не идеальны, засунул тему во флудилку а не в скриптинг (чтобы не удалили/не закрыли), если надо переместите )) Добавлено (2009-05-19, 5:17 Am) --------------------------------------------- с Array'ем вроде разобрался, осталось celltrie использование в консоле сервера: a - создать массив z <arg> - добавить аргумент в массив, если <arg> пустой - он заполняет рандомными символами 10 раз s - узнать размер массива x - вывести все элементы массива с их ID f <arg> - найти символы в массиве c - очистить весь массив v - разрушить (удалить) массив b <item> - удалить слово из массива по ID #define USE_CELL - если тестим числа в массиве Code #include <amxmodx>
new Array:asd new bool:enable = false
//#define USE_CELL // razkomentit esli testim 4isla !
public plugin_init() { register_plugin("Test Array", "1.0", "Koka") register_concmd("a", "create") register_concmd("z", "push") register_concmd("s", "size") register_concmd("x", "get") register_concmd("f", "find") register_concmd("c", "clear") register_concmd("v", "destroy") register_concmd("b", "delete") }
public create() { if(enable) return asd = ArrayCreate(32)//размер массива (для string) enable = true server_print("asd(%d) created", asd) }
public push() { if(!enable) return new arg1[15] read_argv(1, arg1, 14) new size = ArraySize(asd) if(strlen(arg1)) { #if defined USE_CELL new strnum = str_to_num(arg1) ArrayPushCell(asd, strnum) server_print("pushing cell '%d': size 1 + old size %d = size %d", strnum, size, ArraySize(asd)) #else ArrayPushString(asd, arg1) server_print("pushing string '%s': size 1 + old size %d = size %d", arg1, size, ArraySize(asd)) #endif } else { new a = 10//random_num(1000, 5000) new j new temp[32], len #if defined USE_CELL new strnum for(new i=0;i<a;i++) { temp = "" len = 0 for(j=0;j<8;j++) { len += formatex(temp[len], 7 -len, "%d", random_num(0, 9)) } strnum = str_to_num(temp) server_print("#%d push cell '%d'", i, strnum) ArrayPushCell(asd, strnum) } server_print("all pushing = %d + old size %d = size %d", a, size, ArraySize(asd)) #else for(new i=0;i<a;i++) { temp = "" len = 0 for(j=0;j<32;j++) { len += formatex(temp[len], 31-len, "%c", random_num('a', 'z')) } server_print("#%d push string '%s'", i, temp) ArrayPushString(asd, temp) } server_print("all pushing = %d + old size %d = size %d", a, size, ArraySize(asd)) #endif } }
public size() { if(!enable) return server_print("size of asd = %d", ArraySize(asd)) }
public get() { if(!enable) return new size = ArraySize(asd) #if defined USE_CELL for(new i=0;i<size;i++) { server_print("cell #%d = '%d'", i, ArrayGetCell(asd, i)) } #else //new msg[32] for(new i=0;i<size;i++) { /* //odno i toje... no to ydobnee:D ArrayGetString(asd, i, msg, sizeof msg -1) server_print("string #%d = '%s'", i, msg) */ server_print("string #%d = '%a'", i, ArrayGetStringHandle(asd, i))//("%a" !!1adin) } #endif server_print("size of asd = %d", size) }
public find() { if(!enable) return new arg[32] read_argv(1, arg, 31) if(!strlen(arg)) { server_print("put text for find") } else { #if defined USE_CELL new strnum = str_to_num(arg) for(new i=0;i<ArraySize(asd);i++) { if(strnum == ArrayGetCell(asd, i)) { server_print("cell arg '%d' found on #%d item !", strnum, i) return } } #else new string[32] for(new i=0;i<ArraySize(asd);i++) { ArrayGetString(asd, i, string, 31) if(equali(arg, string)) { server_print("string arg '%s' found on #%d item !", arg, i) return } } #endif server_print("not found !") } }
public clear() { if(!enable) return server_print("old size of asd = %d, clearing...", ArraySize(asd)) ArrayClear(asd) server_print("new size of asd = %d", ArraySize(asd)) }
public destroy() { if(!enable) return server_print("array %d destroyed", asd) ArrayDestroy(asd) enable = false }
public delete() { if(!enable) return new item new arg[15] read_argv(1, arg, 14) if(!strlen(arg)) { server_print("put item for delete") } else { item = str_to_num(arg) if((item < 0) || (item > ArraySize(asd))) { server_print("item #%d is not in array", item) } else { #if defined USE_CELL server_print("item #%d cell '%d' removing...", item, ArrayGetCell(asd, item)) #else server_print("item #%d string '%a' removing...", item, ArrayGetStringHandle(asd, item)) #endif ArrayDeleteItem(asd, item) } } } вот примерчик работы без USE_CELL Code s z x c v b f a asd(6) created s size of asd = 0 z #0 push string 'ggbddawvwescgnkohrmrthalihvuybg' #1 push string 'pacqqeowfiwuzhxvxgchjjuatnaewqc' #2 push string 'vjssdhibkrmfjxblwiuazikfbzewcdv' #3 push string 'rgncizukzlzemonlncdxomrbucibbhg' #4 push string 'vempmhedryoaciehuvfyataufwrpwbd' #5 push string 'sahtwvonqpvtvhcakdpklhbnsrsynyu' #6 push string 'wsurxdsmbmifgwpgmkgsrrmldkwxwfw' #7 push string 'aowzkamturyguuvhzbhdsawuoemtxek' #8 push string 'kntrwlvykrkaieverxwodywajfjyens' #9 push string 'vzajwadisspiaashhdgkvnyhvvecccp' all pushing = 10 + old size 0 = size 10 z asijds pushing string 'asijds': size 1 + old size 10 = size 11 z asfsijaf pushing string 'asfsijaf': size 1 + old size 11 = size 12 z #0 push string 'ekczonmlghxmfhxjudvokgbddlvkypd' #1 push string 'udunyrnlmnprmpgaparaucfafglbhqg' #2 push string 'aephrrotedfywmzwhhkaggceuryeybn' #3 push string 'tuyqvoaoqqpcthdahepjlwyyphrqhtz' #4 push string 'hzzqtveaekfaadmsjizwqnnykjlrsan' #5 push string 'udppfftfhezjpcytttsesatugsgfpsv' #6 push string 'fdtnpeifhuwxgkfgdckeuvpccwlqwrn' #7 push string 'kisuibjcmzdcsujsdvgklzalxmzjqju' #8 push string 'xiarpbifhexofzjtwxbhqxbalonncht' #9 push string 'ojitggedbnhjcvzzaiimnczegqvirho' all pushing = 10 + old size 12 = size 22 s size of asd = 22 x string #0 = 'ggbddawvwescgnkohrmrthalihvuybg' string #1 = 'pacqqeowfiwuzhxvxgchjjuatnaewqc' string #2 = 'vjssdhibkrmfjxblwiuazikfbzewcdv' string #3 = 'rgncizukzlzemonlncdxomrbucibbhg' string #4 = 'vempmhedryoaciehuvfyataufwrpwbd' string #5 = 'sahtwvonqpvtvhcakdpklhbnsrsynyu' string #6 = 'wsurxdsmbmifgwpgmkgsrrmldkwxwfw' string #7 = 'aowzkamturyguuvhzbhdsawuoemtxek' string #8 = 'kntrwlvykrkaieverxwodywajfjyens' string #9 = 'vzajwadisspiaashhdgkvnyhvvecccp' string #10 = 'asijds' string #11 = 'asfsijaf' string #12 = 'ekczonmlghxmfhxjudvokgbddlvkypd' string #13 = 'udunyrnlmnprmpgaparaucfafglbhqg' string #14 = 'aephrrotedfywmzwhhkaggceuryeybn' string #15 = 'tuyqvoaoqqpcthdahepjlwyyphrqhtz' string #16 = 'hzzqtveaekfaadmsjizwqnnykjlrsan' string #17 = 'udppfftfhezjpcytttsesatugsgfpsv' string #18 = 'fdtnpeifhuwxgkfgdckeuvpccwlqwrn' string #19 = 'kisuibjcmzdcsujsdvgklzalxmzjqju' string #20 = 'xiarpbifhexofzjtwxbhqxbalonncht' string #21 = 'ojitggedbnhjcvzzaiimnczegqvirho' size of asd = 22 b put text for delete b 999 item #999 is not in array b 10 item #10 string 'asijds' removing... x string #0 = 'ggbddawvwescgnkohrmrthalihvuybg' string #1 = 'pacqqeowfiwuzhxvxgchjjuatnaewqc' string #2 = 'vjssdhibkrmfjxblwiuazikfbzewcdv' string #3 = 'rgncizukzlzemonlncdxomrbucibbhg' string #4 = 'vempmhedryoaciehuvfyataufwrpwbd' string #5 = 'sahtwvonqpvtvhcakdpklhbnsrsynyu' string #6 = 'wsurxdsmbmifgwpgmkgsrrmldkwxwfw' string #7 = 'aowzkamturyguuvhzbhdsawuoemtxek' string #8 = 'kntrwlvykrkaieverxwodywajfjyens' string #9 = 'vzajwadisspiaashhdgkvnyhvvecccp' string #10 = 'asfsijaf' string #11 = 'ekczonmlghxmfhxjudvokgbddlvkypd' string #12 = 'udunyrnlmnprmpgaparaucfafglbhqg' string #13 = 'aephrrotedfywmzwhhkaggceuryeybn' string #14 = 'tuyqvoaoqqpcthdahepjlwyyphrqhtz' string #15 = 'hzzqtveaekfaadmsjizwqnnykjlrsan' string #16 = 'udppfftfhezjpcytttsesatugsgfpsv' string #17 = 'fdtnpeifhuwxgkfgdckeuvpccwlqwrn' string #18 = 'kisuibjcmzdcsujsdvgklzalxmzjqju' string #19 = 'xiarpbifhexofzjtwxbhqxbalonncht' string #20 = 'ojitggedbnhjcvzzaiimnczegqvirho' size of asd = 21 f asf not found ! f asfsijaf string arg 'asfsijaf' found on #10 item ! c old size of asd = 21, clearing... new size of asd = 0 v array 6 destroyed с USE_CELL Code a asd(6) created z #0 push cell '3123385' #1 push cell '6745304' #2 push cell '2299626' #3 push cell '4826808' #4 push cell '9412349' #5 push cell '7943705' #6 push cell '2158891' #7 push cell '5581985' #8 push cell '5201513' #9 push cell '5622539' all pushing = 10 + old size 0 = size 10 s size of asd = 10 x cell #0 = '3123385' cell #1 = '6745304' cell #2 = '2299626' cell #3 = '4826808' cell #4 = '9412349' cell #5 = '7943705' cell #6 = '2158891' cell #7 = '5581985' cell #8 = '5201513' cell #9 = '5622539' size of asd = 10 b 9 item #9 cell '5622539' removing... b 8 item #8 cell '5201513' removing... b 7 item #7 cell '5581985' removing... x cell #0 = '3123385' cell #1 = '6745304' cell #2 = '2299626' cell #3 = '4826808' cell #4 = '9412349' cell #5 = '7943705' cell #6 = '2158891' size of asd = 7 f 2299626 cell arg '2299626' found on #2 item ! f 214r12 not found ! c old size of asd = 7, clearing... new size of asd = 0 v array 6 destroyed
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Вторник, 19.05.2009, 05:27:34 |
|
| |