Clasa Array și Array-urile
Toate array-urile în C# sunt construite pe baza clasei Array din spațiul de nume System. Această clasă definește o serie de proprietăți și metode pe care le putem folosi la lucrul cu array-uri. Iată principalele proprietăți și metode:
- Length: returnează lungimea array-ului
- Rank: returnează dimensiunea array-ului
- int BinarySearch(Array array, object? value): efectuează o căutare binară într-un array sortat și returnează indexul elementului găsit
- void Clear(Array array): golește array-ul, setând valoarea implicită pentru toate elementele
- void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length): copiază din array-ul sourceArray, începând de la indexul sourceIndex, un număr de length elemente în array-ul destinationArray, începând de la indexul destinationIndex
- bool Exists<T>(T[] array, Predicate<T> match): verifică dacă array-ul conține elemente care satisfac condiția delegatului match
- void Fill<T>(T[] array, T value): umple array-ul cu valoarea value
- T? Find<T>(T[] array, Predicate<T> match): găsește primul element care satisface o anumită condiție specificată de delegatul match. Dacă elementul nu este găsit, returnează null
- T? FindLast<T>(T[] array, Predicate<T> match): găsește ultimul element care satisface o anumită condiție specificată de delegatul match. Dacă elementul nu este găsit, returnează null
- int FindIndex<T>(T[] array, Predicate<T> match): returnează indexul primei apariții a unui element care satisface o anumită condiție specificată de delegatul match
- int FindLastIndex<T>(T[] array, Predicate<T> match): returnează indexul ultimei apariții a unui element care satisface o anumită condiție
- T[] FindAll<T>(T[] array, Predicate<T> match): returnează toate elementele sub formă de array care satisfac o anumită condiție specificată de delegatul match
- int IndexOf(Array array, object? value): returnează indexul primei apariții a unui element în array
- int LastIndexOf(Array array, object? value): returnează indexul ultimei apariții a unui element în array
- void Resize<T>(ref T[]? array, int newSize): modifică dimensiunea unui array unidimensional
- void Reverse(Array array): inversează ordinea elementelor din array
- void Sort(Array array): sortează elementele unui array unidimensional
Sortarea unui array
Să sortăm un array folosind metoda Sort():
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
Array.Sort(people);
foreach (var person in people)
Console.Write($"{person} ");
// Alice Bob Kate Sam Tom Tom
Această metodă are multe suprascrieri. De exemplu, una dintre versiuni permite sortarea doar a unei părți din array:
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
// sortăm 3 elemente începând cu indexul 1
Array.Sort(people, 1, 3);
foreach (var person in people)
Console.Write($"{person} ");
// Tom Bob Kate Sam Tom Alice
Căutarea indexului unui element
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
// găsim indexul primei apariții a elementului "Tom"
int tomFirstIndex = Array.IndexOf(people, "Tom");
// găsim indexul ultimei apariții a elementului "Tom"
int tomLastIndex = Array.LastIndexOf(people, "Tom");
// găsim indexul primei apariții a unui element cu lungimea șirului mai mare de 3
int lengthFirstIndex = Array.FindIndex(people, person => person.Length > 3);
// găsim indexul ultimei apariții a unui element cu lungimea șirului mai mare de 3
int lengthLastIndex = Array.FindLastIndex(people, person => person.Length > 3);
Console.WriteLine($"tomFirstIndex: {tomFirstIndex}"); // 0
Console.WriteLine($"tomLastIndex: {tomLastIndex}"); // 4
Console.WriteLine($"lengthFirstIndex: {lengthFirstIndex}"); // 3
Console.WriteLine($"lengthLastIndex: {lengthLastIndex}"); // 5
// găsim indexul elementului "Bob"
// pentru căutare binară, colecția trebuie să fie sortată
Array.Sort(people); // Alice Bob Kate Sam Tom Tom
int bobIndex = Array.BinarySearch(people, "Bob");
Console.WriteLine($"bobIndex: {bobIndex}"); // 1
Dacă elementul nu este găsit în array, metodele returnează -1.
Căutarea unui element după o condiție
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
// găsim primul și ultimul element unde lungimea șirului este mai mare de 3 caractere
string? first = Array.Find(people, person => person.Length > 3);
Console.WriteLine(first); // Kate
string? last = Array.FindLast(people, person => person.Length > 3);
Console.WriteLine(last); // Alice
// găsim elementele cu lungimea șirului egală cu 3
string[] group = Array.FindAll(people, person => person.Length == 3);
foreach (var person in group) Console.WriteLine(person);
// Tom Sam Bob Tom
Modificarea ordinii elementelor din array
De exemplu, să inversăm ordinea elementelor:
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
Array.Reverse(people);
foreach (var person in people)
Console.Write($"{person} ");
// Alice Tom Kate Bob Sam Tom
De asemenea, putem inversa ordinea doar pentru o parte din elemente:
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
// inversăm ordinea a 3 elemente începând cu indexul 1
Array.Reverse(people, 1, 3);
foreach (var person in people)
Console.Write($"{person} ");
// Tom Kate Bob Sam Tom Alice
Modificarea dimensiunii array-ului
Pentru a modifica dimensiunea unui array, se folosește metoda Resize. Primul parametru este array-ul de modificat, iar al doilea parametru este numărul de elemente care ar trebui să fie în array.
Dacă al doilea parametru este mai mic decât lungimea array-ului, array-ul va fi trunchiat. Dacă valoarea parametrului este mai mare, array-ul va fi completat cu elemente suplimentare cu valoarea implicită. Primul parametru este transmis prin referință:
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
// reduc dimensiunea array-ului la 4 elemente
Array.Resize(ref people, 4);
foreach (var person in people)
Console.Write($"{person} ");
// Tom Sam Bob Kate
Copierea unui array
Metoda Copy copiază o parte dintr-un array în altul:
string[] people = { "Tom", "Sam", "Bob", "Kate", "Tom", "Alice" };
var employees = new string[3];
// copiem 3 elemente din array-ul people începând de la indexul 1
// și le inserăm în array-ul employees începând de la indexul 0
Array.Copy(people, 1, employees, 0, 3);
foreach (var person in employees)
Console.Write($"{person} ");
// Sam Bob Kate
În acest exemplu, copiem 3 elemente din array-ul people începând de la indexul 1 și le inserăm în array-ul employees începând de la indexul 0.