Skocz do zawartości

Dynamiczne Tablice


Muzzik
# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

Dynamiczne Tablice

 

Możemy ich użyć zawsze, gdyż są składnikiem biblioteki <amxmodx>, bez której ciężko napisać jakikolwiek plugin.

 

 

1. Co to?

Tablica to zbiór danych tego samego typu. Mamy do nich dostęp przez nazwę tablicy i indeks pola. Jednak zwykłe tablice muszą mieć z góry założoną wielkość.

 

 

new g_CechaGracza[33];          //wielkość:33
new g_kolory[][]={"white","red"};       //wielkość:2x6
Dynamiczne tablice pozwalają na przechowywanie nieokreślonej (ale skończonej Dołączona grafika ) ilości danych. Dzięki temu wykorzystujemy dokładnie tyle miejsca w pamięci ile akurat potrzeba.

 

2. Tworzenie

Musimy zadeklarować tablicę.

 

new Array:MojaTablica;
Jeśli jest globalna (dostępna z każdego miejsca w pluginie) nie możemy od razu jej stworzyć. W innym przypadku można zrobić to od razu przy deklaracji.

 

 

new Array:g_MojaTablica;
public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        g_MojaTablica=ArrayCreate();
}
Interesuje nas ta linijka:

 

g_MojaTablica=ArrayCreate();

ArrayCreate(cellsize=1, reserved=32)

 

  • cellsize

  • rozmiar komórki; dla liczby całkowitej rozmiar=1 (wartość domyślna),

    jeśli elementy tablicy mają być zwykłą tablicą (czyli też stringiem) podajemy tu rozmiar tej tablicy

 

  • reserved

  • ilość tworzonych podczas inicjacji tablicy komórek;domyślnie rezerwowane są 32 pola

    nie jest to maksymalna ilość danych, lecz po stworzeniu tablicy będzie miała ona na starcie tyle indeksów

 

3. Zapis danych

Cóż nam po pustej tablicy - pora uzupełnić ją danymi. Podstawową operacją jest Push. Polega ona na dodaniu nowego elementu na końcu tablicy. Nawet jeśli zarezerwowaliśmy 32 komórki pierwsze Push umieści dane w indeksie 0, drugie w 1 itd.

 

Dla tablicy o cellsize=1 używamy:

ArrayPushCell(Array:which, any:input);

 

  • Array:which

  • docelowa tablica, podajemy tu nazwę naszej zmiennej typu Array:

 

  • any:input

  • dane, które umieszczone zostaną w tablicy; zmienna może być dowolnego typu

    np. liczbą całkowitą/rzeczywistą, znakiem czy inną tablicą Array:

ArrayPushCell(g_MojaTablica,5);

Jeśli jest to pierwszy Push g_MojaTablica w polu o indeksie 0 będzie zawierała liczbę 5.

 

Dla tablicy o cellsize>1 używamy:

ArrayPushString(Array:which, const input[]);

ArrayPushArray(Array:which, const any:input[]);

 

  • Array:which

  • docelowa tablica, podajemy tu nazwę naszej zmiennej typu Array:

 

  • input[]

  • tutaj podajemy tablicę, która umieszczona zostanie w tablicy,

    w przypadku PushString tablica musi być typu całkowitego (znaki) i powinna być zakończona bajtem zerowym '/0'

    PushArray używamy przy pozostałych tablicach

 

 

Aby edytować wybrane pole tablicy używamy funkcji (zależnie od typu):

 

ArraySetCell(Array:which, item, any:input);

ArraySetString(Array:which, item, const input[]);

ArraySetArray(Array:which, item, const any:input[]);

 

Argumenty są prawie te same, funkcje działają analogicznie do Push, więc nie będę się rozpisywał.

Pojawił się nowy parametr:

 

  • item

  • edytowany indeks; liczba porządkowa określająca położenie danych w tablicy

jeśli chcemy zmienić piątkę z poprzedniego przykładu napiszemy tak:

 

ArraySetCell(g_MojaTablica,0,6);
Teraz g_MojaTablica w polu o indeksie 0 będzie zawierała liczbę 6.

 

4. Odczyt danych

Zależnie od rodzaju przechowywanych danych używamy jednej z trzech funkcji:

ArrayGetCell(Array:which, item);

zwraca wartość z pola o indeksie item z tablicy which

 

ArrayGetString(Array:which, item, output[], size);

wypełnia (przez referencję ) tablicę output do maks. długości size tekstem z pola o indeksie item z tablicy dynamicznej which

 

ArrayGetArray(Array:which, item, any:output[]);

wypełnia (przez referencję ) tablicę output wartościami tablicy z pola o indeksie item z tablicy dynamicznej which

 

5. Przydatne funkcje

ArrayClear(Array:which);

 

  • czyści dynamiczną tablicę dynamiczną which
ArraySize(Array:which);

 

  • zwraca ilość elementów tablicy dynamicznej which; ostatni indeks w g_MojaTablica (jeśli nie jest pusta) to (ArraySize(g_MojaTablica)-1)

6. Więcej?

Pełniejsza lista funkcji będzie pewnie w dokumentacji amxx.pl

Póki co radzę wpisać w AMXX-Studio gdzieś w kodzie słowo "Array" i jeśli korzystasz z podpowiedzi pokaże się przesuwana lista wszystkich funkcji z cellarray.inc

 

 

Powodzenia przy pisaniu pluginów korzystających z dynamicznych tablic!

 

 

 

 

Źródło amxx.pl

 

 

 

Zapraszam na mojego twittera:

@Muzzikx

Odnośnik do komentarza

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności