AMX MOD X
Четверг, 26.12.2024, 21:21:50



Приветствую Вас Гость | RSS
[ Главная ] [ Изучение cellarray и celltrie - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Изучение cellarray и celltrie
KokaДата: Вторник, 19.05.2009, 05:17:06 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
Дайте учебник по или подскажите пару наглядных плагинов с их использованием :)
И еще, правда что celltrie ищет слово в огромном массиве быстрее чем обычный перебор for(new i=0; i<?; i++) ??
либо (для не ленивых :) ) и тех кто работает с этими инклудами - напишите плз пару простых примерчиков как вставлять, искать, удалять, очищать (и что там можно еще полезного делать) эти массивы

ps: т.к. правила форума не идеальны, засунул тему во флудилку а не в скриптинг (чтобы не удалили/не закрыли), если надо переместите ))

Добавлено (2009-05-19, 5:17 Am)
---------------------------------------------
с Array'ем вроде разобрался, осталось celltrie B)

использование в консоле сервера:
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
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024