|
Multe obiecte implementeaza aceasta metoda deoarece reprezinta un mod convenabil de a obtine o structura de date usor de manipulat din clase cu care este dificil de lucrat. Poti trage cu ochiul la documentatia Ruby API pentru a vedea daca obiectul pentru care vrei sa apelezi aceasta metoda o are implementata.
Acum, avand un array, poate ca doresti sa-i adaugi elemente. Elementele pot fi usor adaugate intr-un vector prin atribuirea unei valori unui indice non-existent; de exemplu:
array_din_interval[10] = 11
-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
array_din_interval[12] = 12
-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, nil, 12]
In cazul in care exista un decalaj intre indicii ultimului element din array si intre cel mai nou element, Ruby plaseaza valoarea nil (adica echivalentul lui null in alte limbaje de programare) in elementele ce nu au fost initializate (vezi array_din_interval[11] de mai sus). Daca vrei sa adaugi un element la capatul unui array, atunci poti utiliza operatorul <<, metoda push sau anumite forme ale metodei de inserare. De exemplu:
array_din_interval.push(15, 16)
-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16]
array_din_interval.insert(-1, 17)
-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]
array_din_interval << 14
-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14]
Metoda push iti permite sa adaugi unul sau mai multe elemente la finalul unui array; fiecare element ar trebui sa fie furnizat ca parametru al metodei. Metoda insert iti permite sa introduci elemente la (indicele specificat + 1); in exemplu, am folosit -1 pentru a adauga elemente la sfarsitul array-ului (de ex. -1 muta un element de la capatul intervalului inapoi in ultima pozitie; adaugarea unui element dupa ultimul element l-ar adauga in mod efectiv la sfarsit). Probabil ca aceasta metoda nu este cea mai buna, dar poate fi utilizata in cazul in care aceeasi metoda trebuie sa introduca elemente in diverse locuri din array (inclusiv la sfarsit). Operatorul << iti permite sa impingi anumite elementele la capatul unui array; am pluralizat cuvantul element deoarece mai multe dintre aceste "adaugiri" pot fi legate impreuna pentru a adauga numeroase elemente la sfarsitul unui array. De exemplu:
array_din_interval << 20 << 21 << 22
-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 21, 22]
Acum ca ai date in array-ul tau, ce poti face cu ele? Mie imi place sa-mi admir datele, sa ma mandresc cu capacitatea mea de a valorifica tot ceea ce reprezinta un array si sa-mi arunc pumnul in aer strigand: "Eu sunt Spartacus, stapanul array-ului!". Apoi, sotia mea se uita la mine si spune ca sunt nebun, devine ciudat, si ma intorc la munca. S-ar putea sa functioneze si in cazul tau; cei mai multi oameni opteaza insa pentru utilizarea array-urilor pentru a pastra niste elemente si pentru a le apela atunci cand au nevoie (insa nu este la fel de distractiv). Pentru a utiliza valoarea unui element dintr-un array, faci pur si simplu referire la elementul dorit cu ajutorul indexului sau astfel: nume_array[index]. De exemplu:
puts array_din_interval[0]
-> 1
index = 2
array_din_interval[index]
-> 3
array_din_interval[0..2]
-> [1, 2, 3]
Observa ca atunci cand te referi la elementele array-ului, te poti referi la un singur element cu un index numar intreg sau poti folosi un interval pentru a te referi la un numar de elemente. Aminteste-ti, deoarece indexarea array-ului incepe de la 0, indicele de referinta 0 se refera de fapt la primul element. De asemenea, asigura-te atunci cand introduci un index ca este un numar intreg sau un interval, daca nu, Ruby va returna TypeError (care iti va zdrobi sufletul). Aceasta pare a fi o problema stupida (si o consecinta si mai stupida!), dar ar putea aparea in cazul in care (pentru un motiv oarecare), ai fi citit indecsii dintr-un fisier (care interpreteaza orice valoare ca un sir de caractere, astfel incat va trebui sa le convertesti cu ajutorul metodei pe care o vei invata mai tarziu). Aceasta metoda de referire la elementele unui array functioneaza asemenea metodei at:
puts array_din_interval.at(0)
-> 1
O alta metoda, fetch, poate opera in mod similar, dar fetch poate preciza de asemenea o valoare implicita pentru a fi returnata in cazul in care indicele specificat nu este gasit.
puts array_din_interval.fetch(999, "Element inexistent!!")
-> Element inexistent!!
O alta metoda, values_at opereaza similar cu at, fetch si operatorul [], dar, spre deosebire de acestea, poate primi ca parametri o serie de indecsi pe care ii cauta in array, returnand elementele corespunzatoare sub forma unui vector.
puts array_din_interval.values_at(0, 1, 2)
-> [1, 2, 3]
Ultima modalitate pe care vreau sa o impartasesc pentru extragerea de elemente este reprezentata de metodele pop si shift. Metoda pop preia ultimul element din array si il elimina; metoda shift extrage primul element din vector si il elimina, mutand toate celelalte elemente inapoi cu un index.
array_din_interval.pop
-> [1, 2, 3, 4, 5, 6, 7, 8, 9]
array_din_interval.shift
-> [2, 3, 4, 5, 6, 7, 8, 9, 10]
Deci, acum ai un array, ai date in el, dar poate ca ai o problema cu acel al treilea element si vrei sa-l elimini. Din fericire, Ruby se poate ocupa de aceasta mica problema si sa spunem ca nu este amabil. Metoda delete_at sterge elementul de la indicele specificat ca parametru si returneaza valoarea acelui element. De exemplu:
puts array_din_interval.delete_at(1)
-> 2
array_din_interval
-> [1, 3, 4, 5, 6, 7, 8, 9, 10]
O alta metoda pe care array-urile o ofera pentru stergerea elementelor este metoda delete (ce surpriza, nu?). Aceasta metoda sterge si returneaza valoarea la care se face referire ca parametru, mai degraba decat un index ca delete_at. De exemplu:
puts array_din_interval.delete(4)
-> 4
array_din_interval
-> [1, 2, 3, 5, 6, 7, 8, 9, 10]
puts array_din_interval.delete(1337) { "Gresit!" }
-> Gresit!
Retine ca elementul cu valoarea de 4 a fost sters si nu indicele 4. De asemenea, retine ca metoda delete ofera optiunea returnarii unei valori "standard" daca valoarea specificata nu exista in array; ultimul exemplu este o demonstratie a acestei facilitati. Blocul de cod delimitat de acolade este returnat daca elementul nu este gasit (voi vorbi mai pe larg despre aceste tipuri de blocuri de cod mai tarziu).
Cam atat despre colectii. In urmatoarea parte a acestui tutorial vei putea citi despre dictionare sau Hash si despre utilizarea variabilelor in Ruby.
|