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