C# 4.0 полное руководство - 2011
Шрифт:
// Обратить содержимое массива.
using System;
class ReverseDemo { static void Main {
int[] nums = { 1, 2, 3, 4, 5 };
// Отобразить исходный порядок следования. Console.Write("Исходный порядок следования: ");
foreach(int i in nums)
Console.Write(i + " ");
Console.WriteLine ;
// Обратить весь массив.
Array.Reverse(nums);
// Отобразить обратный порядок следования.
Console.Write("Обратный
Console.Write (i + " ");
Console.WriteLine;
// Обратить часть массива.
Array.Reverse(nums, 1, 3);
// Отобразить обратный порядок следования.
Console.Write("Частично обращенный порядок следования: "); foreach(int i in nums)
Console.Write(i + " ");
Console.WriteLine;
}
}
Эта программа дает следующий результат.
Исходный порядок следования: 12 3 4 5 Обратный порядок следования: 5 4 3 2 1 Частично обращенный порядок следования: 5 2 3 4 1
Копирование массива
Полное или частичное копирование одного массива в другой — это еще одна весьма распространенная операция с массивами. Для копирования содержимого массива служит метод Сору . В зависимости от его варианта копирование элементов исходного массива осуществляется в начало или в средину целевого массива. Применение метода Сору демонстрируется в приведенном ниже примере программы.
// Скопировать массив. ^
using System;
class CopyDemo {
static void Main {
int[] source ={1, 2, 3, 4, 5}; int[] target = { 11, 12, 13, 14, 15 }; int[] source2 = { -1, -2, -3, -4, -5 };
// Отобразить исходный массив.
Console.Write("Исходный массив: "); foreach(int i in source) •
Console.Write(i + " ");
Console.WriteLine ;
// Отобразить исходное содержимое целевого массива.
Console.Write("Исходное содержимое целевого массива: "); foreach(int i in target)
Console.Write(i,+ " ");
Console.WriteLine;
// Скопировать весь массив.
Array.Copy(source, target, source.Length);
// Отобразить копию.
Console.Write("Целевой массив после копирования: "); foreach(int i in target)
Console.Write(i + " ");
Console.WriteLine;
// Скопировать в средину целевого массива.
Array.Copy(source2, 2, target, 3, 2);
// Отобразить копию.
Console.Write("Целевой массив после частичного копирования: "); foreach(int i in target)
Console.Write(i + " ");
Console.WriteLine;
}
}
Выполнение этой программы дает следующий результат.
Исходный массив: 12 3 4 5
Исходное содержимое целевого массива: 11 12 13 14 15
Целевой массив после копирования: 12 3 4 5
Целевой массив после частичного копирования: 12 3-3-4
Применение предиката
Предикат представляет собой делегат типа System. Predicate, возвращающий логическое значение true или false в зависимости от некоторого условия. Он объявляется следующим образом.
public delegate bool Predicate<T> (T obj)
Объект, проверяемый по заданному условию, передается в качестве параметра obj. Если объект obj удовлетворяет заданному условию, то предикат должен возвратить логическое значение true, в противном случае — логическое значение false. Предикаты используются в ряде методов класса Array, включая: Exists , Find , Findlndex и FindAll.
В приведенном ниже примере программы демонстрируется применение предиката с целью определить, содержится ли в целочисленном массиве отрицательное значение. Если такое значение обнаруживается, то данная программа извлекает первое отрицательное значение, найденное в массиве. Для этого в ней используются методы Exists() и Find.
class PredDemo {
// Предикатный метод, возвращающий логическое значение true,
// если значение переменной v оказывается отрицательным, static bool IsNeg(int v) { if (v < 0) return true; return false;
}
static void Main {
int[] nums = { 1, 4, -1, 5, -9 };
Console.Write("Содержимое массива nums: "); foreach(int i in nums)
Console.Write (i + " ");
Console.WriteLine;
// Сначала проверить, содержит ли массив nums отрицательное значение, if(Array.Exists(nums, PredDemo.IsNeg)) {
Console.WriteLine("Массив nums содержит отрицательное значение.");
// Затем найти первое отрицательное значение" в массиве, int х = Array.Find(nums, PredDemo.IsNeg);
Console.WriteLine("Первое отрицательное значение: " + x);
}
else
Console.WriteLine("В массиве nums отсутствуют отрицательные значения.");
}
}