Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2.1.doc
Скачиваний:
0
Добавлен:
05.01.2020
Размер:
442.88 Кб
Скачать

Базовый класс System.Array

Все классы-массивы являются потомками класса Array из библиотеки FCL (статическом компоненте Framework .Net.) Помимо наследования свойств и методов класса Object и вышеперечисленных интерфейсов, класс Array имеет довольно большое число собственных методов и свойств. Благодаря такому мощному родителю, над массивами определены самые разнообразные операции - копирование, поиск, обращение, сортировка, получение различных характеристик. Массивы можно рассматривать как коллекции и устраивать циклы foreach для перебора всех элементов.

Таблица 1.3 - Свойства класса Array

Свойство

Родитель

Описание

IsFixedSize

Интерфейс IList

True, если массив статический

Length

Число элементов массива

Rank

Размерность массива

Таблица 1.4 - Статические методы класса Array

Метод

Описание

BinarySearch()

Двоичный поиск.

Clear()

Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк.

CopyTo()

Копирование части или всего массива в другой массив. Описание и примеры даны в тексте

GetLength()

Используется для определения количества элементов в указанном измерении массива

IndexOf()

Индекс первого вхождения образца в массив. Описание и примеры даны в тексте

LastIndexOf()

Индекс последнего вхождения образца в массив. Описание и примеры даны в тексте

Reverse()

Обращение одномерного массива.

Sort()

Сортировка одномерного массива встроенных типов данных.

GetValue()

SetValue()

Возвращает или устанавливает значение указанного индекса для массива.

GetUpperBound()

GetLowerBound()

Используется для определения нижней или верхней границы выбранного измерения массива.

// Программа 1. Применение методов класса Array

public static int Main(string[] args) {

string[]firstNames={"Саша", "Маша", "Олег", "Света", "Игорь"};

Console.WriteLine("Here is the array:");

for(int i=0; i< firstNames.Length; i++)

Console.WriteLine(firstNames[i]+"\t");

Console.WriteLine("\n");

Array.Reverse(firstNames);

for(int i=0; i< firstNames.Length; i++)

Console.WriteLine(firstNames[i]+"\t");

Console.WriteLine("\n");

Console.WriteLine("Cleared out all but one…");

Array.Clear(firstNames,1,4);

for(int i=0; i< firstNames.Length; i++)

Console.WriteLine(firstNames[i]+"\t\n");

return 0;

}

В следующей процедуре, формальный аргумент которой будет принадлежать родителю всех классов-массивов, можно передавать массив любого класса в качестве фактического аргумента:

// Программа 2. Принение методов класса Array

public static void PrintAr(string name, Array A) {

Console.WriteLine(name);

switch (A.Rank) {

case 1:

for(int i = 0; i<A.GetLength(0);i++)

Console.Write("\t" + name + "[{0}]={1}", i, A.GetValue(i));

Console.WriteLine();

break;

case 2:

for(int i = 0; i<A.GetLength(0);i++) {

for(int j = 0; j<A.GetLength(1);j++)

Console.Write("\t" + name + "[{0},{1}]={2}", i,j, A.GetValue(i,j));

Console.WriteLine();

}

break;

default: break;

}}

Примеры различных операций, доступных при работе с массивами, благодаря наследованию от класса Array:

// Программа 3. Применение методов класса Array

public void TestCollection() { //операции над массивами

int nc = 7;

int[] col1 = new int[nc], col2 = new int[nc];

double[] col3 = new double[nc];

int[,] col4 = new int[2,2];

CreateCollection(col1); //заполнение случайными числами

PrintCollection("col1",col1);

CreateCollection(col2);

PrintCollection("col2",col2);

CreateCollection(col3);

PrintCollection("col3",col3);

CreateTwoDimAr(col4);

PrintCollection("col4",col4);

// поиск элемента

int first = Array.IndexOf(col1, 2);

int last = Array.LastIndexOf(col1,2);

if (first == -1)

Console.WriteLine("Нет вхождений 2 в массив col1");

else if (first ==last)

Console.WriteLine("Одно вхождение 2 в массив col1");

else

Console.WriteLine("Несколько вхождений 2 в массив col1");

//first = Array.IndexOf(col4, 4); только одномерный массив

Array.Reverse(col1);

Console.WriteLine("Обращение массива col1:");

PrintCollection("col1",col1);

//копирование

Array.Copy(col1, col3, col1.Length);

Console.WriteLine(" Массив col3 после копирования массива col1:");

PrintCollection("col3",col3);

Array.Copy(col1,1,col2,1,2);

Console.WriteLine("копирование двух элементов col1 в col2:");

PrintCollection("col1",col1);

PrintCollection("col2",col2);

//быстрая сортировка Хоара

Array.Sort(col1);

Console.WriteLine("Отсортированный массив col1:");

PrintCollection("col1",col1);

first = Array.BinarySearch(col1, 2);

Console.WriteLine("Индекс вхождения 2 в col1: {0}",first);

//Создание экземпляра (массива)

Array my2Dar = Array.CreateInstance(typeof(double), 2,3);

PrintCollection("my2Dar",my2Dar);

//клонирование

my2Dar = (Array)col4.Clone();

Console.WriteLine("Массив my2Dar после клонирования col4:");

PrintCollection("my2Dar",my2Dar);

//копирование CopyTo

col1.CopyTo(col2,0);

Console.WriteLine("Массив col2 после копирования col1:");

PrintCollection("col2",col2);

}

В этой процедуре продемонстрированы вызовы различных статических методов класса Array. Для метода Copy показан вызов двух реализаций этого метода, когда копируется весь массив и часть массива. Закомментированный оператор вызова метода IndexOf напоминает о невозможности использования методов поиска при работе с многомерными массивами.