Массивы
Лабораторная работа №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, добавляющий новую строку в конец существующей.