W cz??ci sz?stej moich poradnik?w, g??wnym tematem b?d? tabele lub jak kto woli tablice. Poznamy ich zastosowanie,rodzaje etc.
wielowymiarowe
Ja osobi?cie b?d? pos?ugiwa? si? s?owem "tabela", aczkolwiek mo?na tez "tablica".
Tabela wielowymiarowa posiada t? ilo?? wymiar?w. Mamy jednowymiarowe,dwuwymiarowe,tr?jwymiarowe itd. Dlatego og?ln? nazw? jest "tablica wielowymiarowa". Ta 'ilo??' wymiar?w to ilo?? indeks?w/warto?ci w tej tabeli.
taki kod zwr?ci nam , poniewa? otrzymujemy warto?? indeksu pierwszego i drugiego.
W takim przypadku nasz kod jest ju? b??dny, co prawda nie zwr?ci on b??du tylko W przypadku mojego testu: Numer ten za ka?dym razem jest inny. Aczkolwiek nie ma on dla nas znaczenia. Aby poprawnie wy?wietli? warto?? 2 z indeksu 1 z tabeli, musimy poda? numer tego indeksu z kt?rego chcemy pobra? warto??.
taki kod poprawnie zwr?ci nam Tych indeks?w/tabel/kom?rek mo?emy wstawia? ile trzeba, mo?na te? i tak
, nasz kod jest ju? z?y, poniewa? tbl[1][2] czyli tablica 'tbl' indeks '1' i indeks/kom?rka '2' to tabela, czyli ponownie zwr?ci nam Aby pobra? warto?? z pierwszego indeksu czyli te 100 to robimy tbl[1][1], natomiast je?li chcemy teraz z naszej tabeli pobra? powiedzmy liczb? 4 to musimy poda? indeks w tabeli gdzie znajduje si? nasza warto??. Czyli tbl[1][2][4] to zwr?ci nam 4, poniewa? tbl[1] czyli tabela 'tbl' indeks 1, [2] indeks 2 z tabeli, czyli r?wnie? tabela (tak, tabela w tabeli) i [4] czyli numer indeksu z kt?rego chcemy pobra? warto??, w tym przypadku 4 czyli 4. Ka?da warto?? po przecinku w tabeli to nowy kolejny indeks. Czyli tak na prawd? nasza tabela wygl?da tak:
2 tabele w g??wnej tabeli 'tbl', jedna tabela zawiera 100 i drug? tabel?, w kt?rej znajduj? si? warto?ci od 1 do 5. Indeksy w przypadku tabeli w tabeli, czyli tbl[1][2][3] 3 to ten indeks, indeks nie mo?e by? mniejszy ni? 1, nie damy rady zrobi? przecie? mniejszego indeksu w tej tabeli {100,{1,2,3,4,5}} indeks jest liczony od 1 wzwy?. Natomiast mo?emy zrobi? tak
wtedy
pozytywnie zwr?ci nam warto?? czyli w moim przypadku 1000. Warto?ci? nie koniecznie musi by? liczba, mo?e to by? string, boolean,tabela,nil a nawet function. To po prostu przypisana zmienna danego rodzaju. Budowa tabeli mo?e te? by? taka
To jest to samo, tyle ?e w innej formie, zamiast dodawa? do tabeli indeksy to sami je "r?cznie" tam pakujemy. W tym przypadku tbl[2][1] zwr?ci nam 3, poniewa? [2] to indeks z g??wnej tabeli a [1] to indeks w tej tabeli z indeksu 2. Czyli
Czyli tbl[index][index z kom?rki] Czyli jeszcze pro?ciej to w tabeli tbl te {1,2,3} {3,2,1} to s? jakby kom?rki a w nich s? warto?ci, gdzie ka?da warto?? to indeks. tbl[3][2] to 50.
Tutaj tak samo mo?e te? by? string,nil,itd.
Wynikiem b?dzie: W poprzedniej cz??ci (pi?tej) tematem by?y p?tle, by?a tam taka p?tla jak "for" za jej pomoc? r?wnie? mo?emy wyci?gn?? dane z tablicy a nawet ilo?? indeks?w/kluczy.
wynik: Dlatego te? w tym przypadku musimy poda? indeks, nie musimy podawa? ju? ka?dego indeksu g??wnej tabeli, wystarczy samej warto?ci, czyli:
Wynik: Mo?emy tam umie?ci? nawet funkcje:
Co prawda taki kod zwr?ci nam
Dlatego te? warto zrobi? warunek, kt?ry sprawdzi czy typem warto?ci jest funkcja, je?li tak to j? wywo?a.
No i wynik W nawiasach mo?emy poda? ewentualne potrzebne argumenty do funkcji. Jest to tak zwany 'switch', aczkolwiek nie do ko?ca, o switchah to potem. Nast?pn? mo?liw? form? tabeli jest co? takiego
W takim przypadku mo?emy u?y? r?wnie? p?tli for lub te? zrobi? tak
Wynikiem b?dzie W przypadku p?tli for
Wynik Warto zwr?ci? uwag?, ?e jest tutaj pairs nie ipairs Gdy? ipairs iteruje tylko po kluczach, kt?re s? kolejnymi liczbami naturalnymi, a jak wiadomo a,b,c to nie liczba. Kolejna forma
Wtedy indeksem jest liczba w nawiasie kwadratowym, czyli je?li chc? uzyska? np true to tbl[4]. Je?li "tabela" to tbl[1][1]. Gdy? pierwsze [1] to indeks w tabeli "tbl" a drugie [1] to indeks w tej tabeli {"tabela"} a indeksem pierwszym jest "tabela". Nazwa tabeli to po prostu zmienna, mo?e by? inna ni? tbl i mo?e te? by? globalna (bez przedrostka 'local'). Z budowy tabel zdaje mi si?, ?e to chyba wszystko je?li chodzi o wielowymiarowe.
asocjacyjne
Tablica asocjacyjna to prawie to samo co tablica wielowymiarowa, aczkolwiek tutaj indeksami nie s? liczby, tylko identyfikatory znakowe czyli klucze (string).
Tutaj zamiast indeksu jest klucz czyli w naszym wypadku Jamajka oraz Karaiby, wielko?? liter ma znaczenie, podany klucz musi by? identyczny jak jest w tabeli. Klucz mo?e by? podany w cudzys?owiu, ja u?ywam apostrofu aczkolwiek to bez r??nicy. Drugim sposobem jest podobny do tego z wielowymiarowej,
Wynik:
W przypadku takiej tabeli nie uzyskamy ilo?ci indeks?w z p?tli, mo?emy jedynie zrobi? zmienn? + warto??
Na pewno nie kt?re osoby zrozumiej? co mam na my?li.
R?wnie dobrze, mo?emy zrobi? bez p?tli czyli
Wynik b?dzie taki sam czyli
Mo?emy te? zrobi? przecie? tabel? "mieszan?"
Tylko jak teraz z tego wyci?gn?? poszczeg?lne warto?ci? A no bardzo prosto albo p?tla albo bez.
i wynik to
A z p?tl?
Wynik to:
Trzeba poda? klucz czyli market i w nim jeszcze drugi klucz z kt?rego chcemy wyci?gn?? dane czyli biedronka. Z tabel asocjacyjnych z kluczami to raczej te? chyba ju? na tyle.
switch
Na pocz?tku pragn? poinformowa?, ?e te switche w lua to s? pseudo switche, gdy? nic takiego nie zosta?o domy?lnie zaimplementowane do lua, mo?emy jedynie na?ladowa? ich dzia?anie. Co to jest switch? Switch to funkcja w tabeli, co? na zasadzie tego przyk?adu z funkcj? w wielowymiarowych tabelach. Indeksem mo?e by? zar?wno liczba jak i klucz.
Jak teraz tak? funkcj? wywo?a?? Tak
te [1] to indeks. W przypadku asocjacyjnej czyli kluczy:
Wywo?ujemy tak:
Jako i? jest to funkcja to musimy dodawa? nawiasy aby j? wywo?a? jako normaln? funkcj?. Wynik:
Klucze
Prosty przyk?ad na bindKey'ach z mta.
Jest to w miar? fajne rozwi?zanie.
Funkcje tabel table.concat
Funkcja table.concat dodaje nam podany ci?g znak?w w otrzymane warto?ci, przyk?adowo
Wynik Drugi przyk?ad:
Wynik Mo?na te? poda? konkretny indeks,
Wynik Argument ten wyznacza od kt?rego do kt?rego indeksu ma zosta? "wstawiony" ten znak.
tbl to tabela, "." to znak, 3 to indeks od kt?rego ma by? wstawiany znak, 5 to indeks do kt?rego ma by? wstawiany znak. Wymaganym argumentem jest jedynie tabela.
table.insert
Funkcja table.insert dodaje nam do tabeli podan? warto??,
Wynik:
Argument tbl to tabela, 4 to opcjonalny numer indeksu na kt?ry ma zosta? dodana warto?? a "cztery" to warto??, kt?ra ma zosta? dodana. Je?li nie podamy indeksu to domy?lnie b?dzie to nast?pny wolny indeks. Wymaganym argumentem jest jedynie tabela oraz warto??.
table.remove
Funkcja table.remove usuwa nam podany index/podan? warto?? z tabeli. Przyk?adowo
Taki kod doda nam do tabeli 3 indeksy gdzie warto?? to kolejna liczba od 1 do 3. Nast?pnie usuwa z tabeli indeks 2, czyli dw?jk? z tabeli. Wymaganym argumentem jest jedynie tabela, drugi argument jest opcjonalny. Je?li podamy tylko tabel? to usuniemy wszystko z tabeli.
table.sort
Funkcja table.sort jak sama nazwa wskazuje, sortuje nam dane.
Taki kod zwr?ci nam Czyli w takiej kolejno?ci jak s? te warto?ci umieszczone.
Natomiast taki kod posortuje nam w tym przypadku warto?ci alfabetycznie.
To jak posortowa? liczby?
Przecie? taki kod zwr?ci nam Jak to posortowa? od najwi?kszej do najmniejszej? U?yjemy do tego w?asnej funkcji,
Wynik
Je?li od najmniejszej do najwi?kszej to zamieniamy
na
I otrzymamy nasz efekt.
table.maxn
Funkcja table.maxn nie jest ju? u?ywana w lua, aczkolwiek MTA korzysta ze starszej wersji lua gdzie takowa funkcja jeszcze jest dost?pna. Funkcja table.maxn
zwraca nam najwi?kszy dodatni indeks, je?li takowego nie ma no to zwraca nam 0.
Taki kod zwr?ci nam Poniewa? to najwi?kszy indeks. UWAGA Funkcja table.maxn to nie to samo co operator d?ugo?ci
Operator d?ugo?ci tabeli
Operator ten zwraca "wielko??/d?ugo??" tabeli.
Taki kod zwr?ci Poniewa? operator ten zwraca ilo?? wszystkich indeks?w w tabeli, table.maxn zwr?ci?o by
tabele wielowymiarowe to tylko abstrakcja w ?wiecie programowania, w praktyce da si? stworzy? TYLKO 2 wymiarowe tabele kt?re mog? w sobie posiada? inne 2 wymiarowe tabele.
Nie pokaza?e? wa?nej rzeczy - jak posortowa? wielokolumnowe tabele, jak sortowa? po kluczu
nie pokaza?e? r?wnie? jak sprawdzi? d?ugo?? tabeli o nienumerycznych kluczach
brakuje te? informacji jak dzia?aj? funkcje do tworzenia w?asnych iterator?w
Przeczytalem caly wyzej napisany poradnik, lecz za duzo nie zrozumialem. Chcialbym zapytac wprost jakie lub gdzie mozemy zastosowac taka tabele? Moglbys napisac jakis przyklad?
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach