Intro

Dzień dobry, dzień dobry. Dzisiaj opowiem o tych, co wszystko mają w pamięci, czyli o tablicach. :)

Co to ło to to to?

Tablica, czyli z definicji ciągły, rosnący, obszar w pamięci.

nadal pamiętam formułkę :D Tablice, pomagają nam przechowywać dane w ustrukturyzowany sposób, choć same dane już ustrukturyzowane być nie muszą.

W Bash’u wyróżniamy dwa typy tablic:

  • indeksowana
  • asocjacyjna

Zdziwieni, co? :)

Tablica indeksowana, jak nazwa wskazuje, przyporządkowuje numeryczny indeks dla wartości, które w niej umieszczamy, zaczynają od 0.

Tablica asocjacyjna natomiast przyporządkowuje klucz zamiast numerycznego indeksu.

Jak rodzą się tablice?

Wielu doktorów i profesorów informatyki zadawało sobie to pytanie, na które odpowiedź zna, każdy junior. Cała tajemnica tkwi w inicjacji inicjalizacji.

Do inicjalizacji tablicy indeksowanej możemy wykorzystać jeden z trzech sposobów:

declare -a arr
arr[0]=val
arr=(val1 val2 valn)

W przypadku tablic asocjacyjnych sprawa nie jest już taka różowa, bo by zainicjalizować tablicę asocjacyjną musimy ja zadeklarować, przy pomocy instrukcji declare. W przeciwnym wypadku interpreter na siłę będzie starał się zrobić tablicę indeksowaną. Deklaracja tablicy asocjacyjnej:

declare -A assoc_arr
assoc_arr[k1]=v1
assoc_arr[k2]=v2
assoc_arr[k3]=v2
declare -A assoc_arr = ( [k1]=v1 [k2]=v2 [k3]=v3 )

Na blok operacyjny

Poznaliśmy tajniki inicjalizacji teraz, by się przydało poznać operacje, jakie możemy wykonać na tablicach. Operacje są takie same dla obu typów.

Dostęp do wartości

Jak możecie wnioskować z opisu, by uzyskać dostęp do danych w tablicy, odwołujemy się do indeksu lub klucz, zależnie od typu tablicy.

Tablica Indeksowa: ${arr[0]}

Tablica Asocjacyjna: ${assoc_arr[key]}

Wszystkie elementy

Aby uzyskać wszystkie nasze dane z tablicy, wykorzystujemy do tego znaki @ lub *. Ich działanie jest podobne do tego, które opisałem to w poprzednim poście, na temat zmiennych specjalnych.

${arr[*]}

${arr[@}

Długość tablicy

Do uzyskania długości tablicy wykorzystujemy znak # przed nazwą zmiennej. Znaku tego będziemy używać również do określania długości łańcucha znakowego.

${#arr[*]}

WAŻNE: konieczne jest podanie znaku * lub @ w miejscu adresu, ponieważ sama zmienna tablicowa wskazuje na pierwszy element tablicy i otrzymalibyśmy długość łańcucha znajdującego się na pierwszym miejscu w tablicy.

Wszystkie Klucze/indeksy

By uzyskać wszystkie klucze/indeksy, które znajdują się w naszej tablicy, wstawiamy znak ! przed zmienną: ${!arr[@]}

Usuwanie wartości

W celu usunięcia wartości z pod danego indeksu, jak i całej tablicy wykorzystujemy instrukcję unset:

unser arr[idx]

Czas się zwijać.

Na dziś to by było na tyle.

Z tablicami można robić jeszcze kilka ciekawych rzeczy, ale są one pokrewne z działaniami na łańcuchach znakowych, o których następnym razem.

Zapraszam :)