Работа с массивами и строками. Интерфейсы и коллекции
Массивы
Язык 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, добавляющий новую строку в конец существующей.