Masive
Masivele sunt structuri de date omogene şi continue.
În C#, masivele sunt tipuri referenţiale derivate din clasa abstractă System.Array (crearea clasei derivate se face automat de către compilator). System.Array este mostenita direct din System.Object.
Elementele masivelor pot fi de orice tip suportat (tipuri referenţiale, tipuri valorice, alte masive, …) şi sunt accesate prin intermediul indicilor (începând cu 0). Dimensiunea masivelor este stabilită la crearea acestora (la rulare) şi nu poate fi modificată pe parcurs. Limbajul suportă atât masive unidimensionale, cât şi masive multidimensionale.
Fiind clase, masivele au o serie de proprietăţi şi metode, dintre care cele mai importante sunt:
• Length: numărul total de elemente din masiv;
• GetLength(dim): numarul de elemente de pe o dimensiune;
• Rank: numărul de dimensiuni ale masivului;
• Clone(): creează o copie a masivului; Atenţie: în cazul tipurilor referenţiale sunt copiate numai referinţele, nu şi obiectele referite;
• Copy(), CopyTo(): copiază secţiuni din masiv în alt masiv;
• Multe altele… atat pe instante, cat si pe clasa
Declararea unui masiv unidimensional se face sub forma tip[] nume;. Iniţializarea se poate face la momentul declarării sub forma tip[] nume = {lista valori}; sau ulterior sub forma nume = new tip[] {lista valori};. În cazul în care se doreşte doar alocarea memoriei se poate folosi nume = new tip[dimensiune]; în acest caz se va aloca memorie, iar elementele vor fi iniţializate cu valorile implicite (null pentru tipuri referenţiale, 0 pentru tipurile numerice, …).
Exemple:
// un vector de intregi
int[] vector1;
// initializare vector
vector1 = new int[] {5, 23, 66};
// declarare si initializare
double[] vector2 = {34.23, 23.2};
// accesarea elementelor
double d = vector2[0];
vector2[1] = 5.55;
// alocare memorie fara initializarea elementelor
string[] vector3 = new string[3];
//sortare elemente
Array.Sort(vector2);
// afisarea elementelor
for (int i = 0; i < vector1.Length; i++)
Console.WriteLine("vector1[{0}]={1}", i, vector1[i]);
// si cu foreach
// copierea elementelor
int[] vector4 = new int[vector1.Length];
vector1.CopyTo(vector4, 0); // 0 = pozitia de start
Masivele multidimensionale se utilizează la fel ca şi masivele unidimensionale. Accesarea elementelor se face sub forma [dim1, dim2, …, dimn]:
// declarare si alocare masiv tridimensional
int[,,] cub = new int[5,2,7];
// accesare elemente
cub[0,0,0] = 3;
int k = cub[3,1,5];
// declarare si initializare matrice
int[,] matr =
{
{ 4, 23, 5, 2 },
{ 1, 6, 13, 29 }
};
// afisare masiv bidimensional
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
Console.Write(" {0}", matr[i,j]);
Console.WriteLine();
}
Se pot declara şi masive de masive. Elementele unei astfel de structuri pot fi masive cu oricâte dimensiuni. La utilizarea unor astfel de structuri trebuie avut în vedere faptul că masivele sunt tipuri referenţiale, deci trebuie alocate separat.
6 seminarii
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.