Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Despre Arrays

    Un tablou reprezinta o colectie de variabile de acelasi tip, referite prin intermediul unui nume comun. Tablourile se utilizeaza oriunde exista nevoia de a grupa mai multe variabile de acelasi tip la un loc pentru a putea fi gestionate si sortate cu usurinta.Accesul se face printr-o variabila referinta.

    Diferenta dintre tablourile din alte limbaje si cele din C#, este ca, aici, tablourile sunt implementate ca obiecte, fapt care conduce la colectarea automata a spatiului ocupat de tablourile neutilizate.

In C#, tablourile pot avea mai multe dimensiuni.

Unidimensionale – intalnite foarte frecvent in programare.

    La declarea unui tablou, se creeaza o instanta a clasei .Net, System.Array. Compilatorul va traduce operatiile asupra tablourilor, apeland metode ale System.Array.

La declararea unui tablou folosim tipul variabilei, apoi avem nevoie de “[]” si la sfarsit identificatorul.

Tip [] nume;

array

            //declarea unui tablou unidimensional
            //nu se aloca spatiu pentru memorie
            int[] colectie;

            //instantiere si alocare de memorie
            //zona de memorie cu 4 elemente de tip int
            colectie = new int[4];

    Un mod in care se pot face in acelasi timp si operatiile de declarare, instantiere, initializare, este :


            //declarare, instantiere, initializare
            int[] colectie = new int[] { 23, 23, 12,4 };

    Numarul valorilor dintre acolade trebuie sa fie egal cu numarul care indica marimea vectorului, altfel va aparea eroare la compilare.

    Se poate omite declararea marimii vectorului si folosirea operatorului new. Compilatorul va calcula marimea din numarul de initialzari.

            int[] colectie = { 1, 3, 4, 5, 6 };

Un element din tablou poate fi accesat utilizand un index ( descrie pozitia elementului din cadrul tabloului ). In C#, toate tablourile au indexul primului element egal cu zero.

            //atribuim primului element o noua valoare
            colectie[0] = 100;

    Introducem instructiunea foreach, utilizata pentru iterarea elementelor unei colectii.

foreach ( tip nume-var in colectie ) instructiue;

tip nume-var specifica tipul si numele unei variabile de iterare, care va primi la fiecare iteratie valoarea unui element din colectie. Trebuie ca tip sa fie compatibil cu tipul de baza al tabloului. Variabila de iteratie nu poate fi modificata in timpul utilizarii ei in accesul la tablou.

Exemplu :


            //utilizarea foreach pentru afisarea valorilor din vector
            foreach (int i in colectie)
            {
                 Console.WriteLine(i);
            }

Incepand cu versiunea 3.0, C# introduce cuvantul cheie var. In articolul acesta, il vom folosi pentru a creea vectori de tip implicit.

Exemplu :


            //compilatorul identifica variabila nume ca un vector de string
            var listaNume = new[] { "Elena", "Florin", "Andrei" };

Daca se adauga si alte variabile de alt tip, va aparea eroare la compilare.

    Metoda Array.Sort permite sortarea elementelor dintr-un tablou, indiferent de tipul acestuia.

            System.Array.Sort(listaNume);

            Console.WriteLine("Sortare alfabetica :\n ");
            foreach (string nume in listaNume)
            {
              Console.WriteLine("{0}", nume);
            }

De remarcat ca Array.Sort sorteaza doar obiecte care implementeaza IComparable, interfata care defineste relatie de ordine intre oricare doua elemente de tipul dat.
Un exemplu de sortare “custom” poate fi vazut pe programare.org: .Net IComparer.

    Un avantaj al faptului ca, in C#, tablourile sunt implementate ca obiecte, este atribuirea pentru fiecare tablou a proprietatii Length, care contine numarul de elemente pe care tabloul le poate memora.

Exemplu :

Console.WriteLine("Numarul de elemente din vector este {0}", listaNume.Length);

    Cand incercam sa atribuim o valoare de tipul referinta la un tablou al unei altei valori de tip referinta ( copiere ), se modifica doar obiectul referit de catre acea variabila. Nu se produce o copiere a tabloului si nici continutul unui tablou nu se copiaza in celalalt.

            int[] colectie1 = { 4, 4, 5, 5 };

            int[] colectie2 = { 23, 23, 23, 23 };

            Console.WriteLine("Elemente colectia1:");
            foreach (int numar in colectie1)
            {
                Console.WriteLine(numar);
            }

            Console.WriteLine("Elemente colectia2 :");
            foreach (int numar2 in colectie2)
            {
                Console.WriteLine(numar2);
            }

            //colectie2 refera pe colectie1
            colectie2 = colectie1;
            Console.WriteLine("Dupa atribuire :");

            Console.WriteLine("Elemente colectia1:");
           
            foreach (int numar in colectie1)
            {
                Console.WriteLine(numar);
            }

            Console.WriteLine("Elemente colectia2 :");
            foreach (int numar2 in colectie2)
            {
                Console.WriteLine(numar2);
            }

Tablourile multidimensionale

    Tablourile multidimensionale au doua sau mai multe dimensiuni, iar un element oarecare poate fi accesat utilizand combinatia a doi sau mai multi indici.

    Se face distinctie intre tablouri regulate si tablouri neregulate (tablouri de tablouri – jagged arrays ).

    Cele mai simple tablouri multidimensionale regulate sunt cele bidimensionale. In cadrul acestui tablou, pozitia unui anumit element este data de doi indici.

            //dimensiune 2X2
            int [,] matrice = new int[2,2];
            //atribuim valoare elementului de pe linia 2 si coloana 1
            matrice[1,0] = 230;

    Tablourile reprezinta un raspuns la multe intrebari din programare si sunt utilizate cu succes intr-o mare varietate de scopuri pentru modalitatea convenabila de grupare a variabilelor de acelasi tip la un loc.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*