Массивы

Лабораторная работа №8

Работа с массивами и строками на C#. Интерфейсы и коллекции

Цель работы - продолжение знакомства со средой разработки приложений Microsoft Visual Studio.NET. Изучение особенностей работы с массивами и строками в С#. Ознакомление с реализацией интерфейсами в С#.

Массивы

Язык C# предоставляет средства для работы с одномерными массивами, массивами массивов и многомерными массивами.

Ниже представлены способы объявления ссылок на массивы различной размерности и конфигурации.

// Объявление массива размерности 3 из элементов типа int.

// Фактически это массив составляющих, представляющих собой массивы

// размерности 2 одномерных массивов элементов типа int.

// Размеры всех составляющих массивов одного уровня равны

// между собой ("прямоугольный" массив).

 

int[,,] ar1;

 

// Объявление одномерного массива из

// одномерных массивов элементов, каждый из которых является

// одномерным массивом элементов типа int.

 

int[][][] ar2;

 

// Объявление одномерного массива составляющих, каждый из которых является

// двумерным массивом массивов элементов типа int.

// При этом у всех составляющих могут быть разные размеры

 

int[][,] ar3;

 

// Объявление двумерного массива составляющих, каждая из которых является

// одномерным массивом элементов типа int.

// При этом у всех составляющих могут быть разные размеры.

 

int[,][] ar4;

Рассмотренные примеры демонстрируют определение двух различных категории массивов:

  • прямоугольные массивы,
  • ломаные (jagged) массивы.

Объявление массива может быть совмещено с инициализацией. При объявлении с отложенной инициализацией сам массив не формируется, а создается только ссылка на массив, имеющая неопределенное значение Null. Поэтому пока массив не будет реально создан и его элементы инициализированы, использовать его нельзя.

Возможны два варианта объявления массива совмещенного с инициализацией.

В первом случае инициализация является явной и задается списком констант, например:

int[] odd = {1, 3, 5, 7, 9};

Во втором случае создание и инициализация массива реализуется вместе с вызовом конструктора массива. Например:

int[] even = new int[5];

Все массивы являются потомками класса System.Array, который в свою очередь наследует ряд интерфейсов: ICloneable, IList, ICollection, IEnumerable, а, следовательно, реализует все их методы и свойства. Кроме того, класс Array имеет большое число собственных методов и свойств.

Благодаря наследованию от класса System.Array, для массивов определены такие встроенные методы копирования, поиска, обращения, сортировки. Массивы можно рассматривать также как как коллекции и использовать цикл foreach для перебора его элементов.

Ниже приведены основные свойства и методы класса System.Array:

Свойство Описание
IsFixedSize Возвращает true, если массив является статическим
IsReadOnly Для всех массивов возвращает значение false
IsSynchronized Возвращает true или false, в зависимости от того, установлена ли синхронизация доступа для массива
Length Число элементов в массиве
Rank Размерность массива
Метод Описание
BinarySearch Бинарный поиск элементов
Clear Выполняет инициализацию элементов. Числовые элементы становятся нулевыми, а строковые принимают значение Null
Clone Клонирование массива
Copy Копирование части или всего массива в другой массив
CopyTo Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса
CreateInstance Создание экземпляра массива
GetEnumerator Возварщает интерфейс IEnumerator. Необходим для использования в цикле foreach
GetLength Возвращает число элементов массива по указанному измерению
GetLowerBound, GetUpperBound Возвращает нижнюю и верхнюю границу по указанному измерению. Для массивов нижняя граница всегда равна нулю.
GetValue SetValue Возвращает или устанавливает значение элемента массива с указанными индексами.
IndexOf Индекс первого вхождения образца в массив
LastIndexOf Индекс последнего вхождения образца в массив
Reverse Сортировка одномерного массива в обратном порядке
Sort Сортировка массива
     

Строки

В языке C# определен класс сhar[], и его можно использовать для представления строк постоянной длины. Однако массив сhar[] - это обычный массив, поэтому его нельзя инициализировать строкой символов. В C# не определено преобразование из класса сhar[] в класс String. У String есть динамический метод ToCharArray, задающий подобное преобразование в сhar[].

Объекты класса String объявляются с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса. Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. У класса String достаточно много конструкторов, которые позволяют сконструировать строку из:

  • символа, повторяющегося указанное число раз;
  • массива символов char[] ;
  • части массива символов.

Методы класса String позволяют выполнять вставку, удаление, замену, поиск вхождения подстроки в строку. Класс String наследует методы класса Object, а также методы четырех интерфейсов: IComparable, ICloneable, IConvertible, IEnumerable.

Некоторые из членов класса приведены в таблице:

Метод Описание
Length Это свойство возвращает длину указанной строки
Insert Вставляет подстроку в заданную позицию
Remove Удаляет подстроку в заданной позиции
Replace Заменяет подстроку в заданной позиции на новую подстроку
Substring Выделяет подстроку в заданной позиции
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора
StartsWith, EndsWith Возвращается true или false, в зависимости от того, начинается или заканчивается строка заданной подстрокой
PadLeft, PadRight Выполняет заполнение нужным числом пробелов в начале и в конце строки
Trim, TrimStart, TrimEnd Удаляются пробелы в начале и в конце строки, либо только с одного конца
ToCharArray Преобразование строки в массив символов

Класс String не разрешает изменять существующие объекты. Для этой цели имеется другой класс - класс StringBuilder, который позволяет исправить данный недостаток. Этот класс принадлежит к изменяемым классам и его можно найти в пространстве имен System.Text.

Объекты этого класса объявляются с явным вызовом конструктора класса. Конструктор класса перегружен, и наряду с конструктором без параметров, создающим пустую строку, имеется набор конструкторов, которым можно передать две группы параметров:

  • Первая группа позволяет задать строку или подстроку, значением которой будет инициализироваться создаваемый объект класса StringBuilder.
  • Вторая группа параметров позволяет задать размер объекта, т.е объем памяти, отводимой для экземпляру класса StringBuilder.

Примеры конструкторов:

  • public StringBuilder(string str, int size). Параметр str задает строку для инициализации, size - размер объекта;
  • public StringBuilder(int cursize, int maxsize). Параметры cursize и maxsize задают начальный и максимальный размер объекта;
  • public StringBuilder(string str, int start, int len, int size). Параметры str, start, len задают строку инициализации, size - размер объекта.

Над строками этого класса определены (также как идля строк класса String ) операции:

  • присваивание ( = );
  • две операции проверки эквивалентности ( == ) и ( != );
  • взятие индекса ( [] ).

Операция конкатенации ( + ) не определена над строками класса StringBuilder, ее роль играет метод Append, добавляющий новую строку в конец существующей.