1.4. Клас System.Array
Раніше вже говорилося, що всі масиви в С# побудовані на основі базового класу Array, що містить корисні для програміста властивості й методи, частина з яких перераховані в табл. 1.
Таблиця 1. Основні елементи класу Array
Елемент |
Вид |
Опис |
Length |
Властивість |
Кількість елементів масиву (по всім розмірностям) |
Rank |
Властивість |
Кількість розмірностей масиву |
BinarySearch |
Статичний метод |
Двійковий пошук у відсортованому масиві |
Clear |
Статичний метод |
Присвоювання елементам масиву значень за замовчуванням |
Copy |
Статичний метод |
Копіювання заданого діапазону елементів одного масиву в інший масив |
CopyTo |
Метод |
Копіювання всіх елементів поточного одномірного масиву в інший одномірний масив |
GetValue |
Метод |
Одержання значення елемента масиву |
IndexOf |
Статичний метод |
Пошук першого входження елемента в одномірний масив |
LastlndexOf |
Статичний метод |
Пошук останнього входження елемента в одномірний масив |
Reverse |
Статичний метод |
Зміна порядку проходження елементів на зворотний |
SetValue |
Метод |
Установка значення елемента масиву |
Sort |
Статичний метод |
Впорядкування елементів одномірного масиву |
Властивість Length дозволяє реалізовувати алгоритми, які будуть працювати з масивами різної довжини або, наприклад, зі східчастим масивом. Використання цієї властивості замість явного завдання розмірності виключає можливість виходу індексу за межі масиву. У прикладі 2 продемонстроване застосування елементів класу Array при роботі з одномірним масивом.
Методи Sort, IndexOf й BinarySearch є статичними, тому до них звертаються через ім'я класу, а не екземпляра, і передають у них ім'я масиву. Двійковий пошук можна застосовувати тільки для впорядкованих масивів. Він виконується набагато швидше, ніж лінійний пошук, реалізований у методі IndexOf. У прикладі 2 пошук елемента, що має значення 18, виконується обома цими способами.
Приклад 2. Використання класу System.Array
using System;
namespace ConsoleApplication1
{
class Classl
{
static void Main()
{
int[] a = { 24, 50, 18, 3, 16, -7, 9, -1 };
PrintArray("Вихідний масив:", a);
Console.Write(Array.IndexOf(a, 18));
Array.Sort(a);
PrintArray("Упорядкований масив:", a);
Console.Write(Array.BinarySearch(a, 18));
Console.ReadLine();
}
public static void PrintArray(string header, int[] a)
{
Console.WriteLine(header);
for (int i = 0; i < a.Length; i++)
Console.Write("\t" + a[i]);
Console.WriteLine();
}
}
}
У класі Classl описаний допоміжний статичний метод PrintArray, призначений для виведення масиву на екран. У нього передаються два параметри: рядок заголовка header і масив. Кількість елементів масиву визначається усередині методу за допомогою властивості Length. Таким чином, цей метод можна використати для виведення будь-якого цілочисельного одномірного масиву.
Для того щоб застосовувати метод PrintArray до масивів, що складаються із елементів іншого типу, можна описати його другий параметр як Array. Правда, при цьому значення елемента масиву доведеться одержувати за допомогою методу GetValue, оскільки доступ по індексу для класу Array не передбачений. Узагальнений метод виклику масиву виглядає так:
public static void PrintArray(string header, Array a)
{
Console.WriteLine(header);
for (int i = 0; i < a.Length; ++i)
Console.Write("\t" + a.GetValue(i));
Console.WriteLine();
}