Все массивы в С# построены на основе базового класса Array, который содержит свойства и методы, представленные в таблице 7.1
Таблица 7.1 – Основные элементы класса Array (представлены не полностью)
Свойство
Описание
Length
Количество элементов массива (по всем размерностям)
Rank
Количество размерностей массива
BinarySearch
Двоичный поиск в отсортированном массиве
Clear
Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк.
Copy
Копирование части или всего массива в другой массив.
IndexOf
Поиск индекса первого вхождения элемента в одномерный массив.
LastIndexOf
Поиск индекса последнего вхождения элемента в одномерный массив.
Reverse
Изменение порядка следования элементов на обратный.
Sort
Сортировка элементов одномерного массива
CopyTo
Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса
GetLength
Возвращает число элементов массива по указанному измерению.
GetValue, SetValue
Возвращает или устанавливает значение элемента массива с указанными индексами.
Свойство Length позволяет реализовывать алгоритмы, которые будут работать с массивами различной длины. Использование этого свойства вместо явного задания размерности исключает возможность выхода индекса за границы массива.
Пример применения элементов класса Array для работы с одномерным массивом.
using System;
namespace ConsoleApplication1
{
class Class1
{
static void Main()
{
int [] a= {3,12,5,18,-9,8,-4};
PrintArray (“Исходный массив:”, a); //пользовательская функция (метод)
Console.WriteLine(Array.IndexOf(a,18);
Array.Sort(a);
PrintArray (“Отсортированный массив:”, a);
Console.WriteLine(Array.BinarySearch(a,18));
}//конец Main()
public static void PrintArray(string s, int[] a)
{
Console.WriteLine(s);
for (int i=0;i<a.Length;++i)
Console.Write(“\t”+a[i]);
Console.WriteLine();
} //конец функции
}//конец класса Class1
}//конец пространства имен ConsoleApplication1
Методы Sort(), IndexOf(), BinarySearch() являются статическими, поэтому к ним обращаются через имя класса и передают в них имя массива. Двоичный поиск можно применять только для упорядоченных массивов.
В приведенном примере поиск элемента со значением 18 выполняется двумя способами.
Статический метод PrintArray() предназначен для вывода массива на экран. В него передаются два параметра – строка и одномерный массив. Количество элементов массива определяется с помощью свойства Length, поэтому этот метод можно использовать для вывода любого целочисленного одномерного массива.
Для того, чтобы метод PrintArray() мог применяться к массивам другого типа необходимо вместо передачи обычного одномерного массива использовать класс Array. Значения элементов такого массива получают с помощью метода GetValue, так как доступ по индексу для класса Array не предусмотрен.
Модифицированный метод PrintArray
public static void PrintArray(string s, Array a)
{
Console.WriteLine(s);
for (int i=0;i<a.Length;++i)
Console.Write(“\t”+a.GetValue(i));
Console.WriteLine();
}
Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных. Массив является такой группой. Удобство такого вида цикла заключается в том, что не требуется определять количество элементов и выполнять их перебор по индексу. Просто указывается необходимость перебора всех элементов группы. Синтаксис оператора:
foreach (тип имя in выражение) тело_цикла
Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива выражение (обычно имя массива или имя другой группы данных). В теле цикла выполняются действия с переменной цикла.
Вывод массива a на экран с помощью оператора foreach:
// х - локальная переменная цикла, а - одномерный массив
foreach (int x in a) Console.WriteLine(x);
На каждом проходе цикла очередной элемент массива присваивается переменной х и с ней выполняются действия, записанные в теле цикла.
Пример работы с одномерным массивом с использованием цикла foreach
using System;
namespace ConsoleApplication1
{
class Class1
{
static void Main()
{
const int n=6;
int [] a= {3,12,5,-9,8,-4};
Console.WriteLine(“Исходный массив: ”);
foreach (int x in a)
Console.Write(“\t” +x);
Console.WriteLine();
int s=0,k=0;
foreach (int x in a)
if (x<0)
{
s+=x;
++k;
}
Console.WriteLine(“Сумма отрицательных ”+s);
Console.WriteLine(“Количество отрицательных ”+k);
}}}
Модифицированный метод PrintArray() с использованием оператора цикла foreach
public static void PrintArray(string s, Array a)
{
Console.WriteLine(s);
foreach (object x in a)
Console.Write(“\t”+x);
Console.WriteLine();
}
Такая запись становится возможной потому, что любой объект может быть неявно преобразован к типу базового класса object.
Ограничением применения оператора foreach является то, что с помощью его можно только просматривать значения в группе данных, но не изменять их.
Использование оператора foreach для вывода на экран двумерного массива имеет вид: