Kniga-Online.club
» » » » Герберт Шилдт - C# 4.0: полное руководство

Герберт Шилдт - C# 4.0: полное руководство

Читать бесплатно Герберт Шилдт - C# 4.0: полное руководство. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

    Console.Write("Частично обращенный порядок следования: ");

    foreach(int i in nums)

      Console.Write(i + " ");

    Console.WriteLine();

  }

}

Эта программа дает следующий результат.

Исходный порядок следования: 1 2 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();

  }

}

Выполнение этой программы дает следующий результат.

Исходный массив: 1 2 3 4 5

Исходное содержимое целевого массива: 11 12 13 14 15

Целевой массив после копирования: 1 2 3 4 5

Целевой массив после частичного копирования: 1 2 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().

//Подемострировать применеие предикатного делегата

using System;

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 x = Array.Find(nums, PredDemo.IsNeg);

      Console.WriteLine("Первое отрицательное значение: " + x);

    }

    else

      Console.WriteLine("В массиве nums отсутствуют отрицательные значения.");

  }

}

Эта программа дает следующий результат.

Содержимое массива nums: 1 4 -1 5 -9

Массив nums содержит отрицательное значение.

Первое отрицательное значение: -1

В данном примере программы в качестве предиката методам Exists() и Find() передается метод IsNeg(). Обратите внимание на следующее объявление метода IsNeg().

static bool IsNeg (int v) {

Методы Exists() и Find() автоматически и по порядку передают элементы массива переменной v. Следовательно, после каждого вызова метода IsNeg() переменная v будет содержать следующий элемент массива.

Применение делегата Action

Делегат Action применяется в методе Array.ForEach() для выполнения заданного действия над каждым элементом массива. Существуют разные формы делегата Action, отличающиеся числом параметров типа. Ниже приведена одна из таких форм.

public delegate void Action<T> (T obj)

В этой форме объект, над которым должно выполняться действие, передается в качестве параметра obj. Когда же эта форма делегата Action применяется в методе Array.ForEach(), то каждый элемент массива передается по порядку объекту obj.

Следовательно, используя делегат Action и метод ForEach(), можно в одном операторе выполнить заданную операцию над целым массивом.

В приведенном ниже примере программы демонстрируется применение делегата Action и метода ForEach(). Сначала в ней создается массив объектов класса MyClass, а затем используется метод Show() для отображения значений, извлекаемых из этого массива. Далее эти значения становятся отрицательными с помощью метода Neg(). И наконец, метод Show() используется еще раз для отображения отрицательных значений. Все эти операции выполняются посредством вызовов метода ForEach().

// Продемонстрировать применение делегата Action.

using System;

class MyClass {

  public int i;

  public MyClass(int x) {

    i = x;

  }

}

class ActionDemo {

  // Метод делегата Action, отображающий значение, которое ему передается,

  static void Show(MyClass о) {

    Console.Write(о.i + " ");

  }

  // Еще один метод делегата Action, делающий

  // отрицательным значение, которое ему передается.

  static void Neg(MyClass o) {

    o.i = -o.i;

  }

  static void Main() {

    MyClass[] nums = new MyClass[5];

    nums[0] = new MyClass(5);

    nums[1] = new MyClass(2);

    nums[2] = new MyClass(3);

    nums[3] = new MyClass(4);

    nums[4] = new MyClass(1);

    Console.Write("Содержимое массива nums: ");

    // Выполнить действие для отображения значений.

Перейти на страницу:

Герберт Шилдт читать все книги автора по порядку

Герберт Шилдт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


C# 4.0: полное руководство отзывы

Отзывы читателей о книге C# 4.0: полное руководство, автор: Герберт Шилдт. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*