Yurijnd.com
Четверг, 06.02.2025, 19:39
Меню сайта

Вход на сайт

Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Класс Array

    Каждый создаваемый массив получает большую часть функциональности от класса System.Array. Общие члены этого класса позволяют работать с массивом с использованием полноценной объектной модели. Таким образом, методы и свойства, определенные в классе Array, можно использовать с любым массивом C#. Давайте разберем некоторые полезные особенности класса Array.

    Создание массивов

    Класс Array является абстрактным, поэтому создать массив с использованием какого-либо конструктора нельзя. Однако вместо применения синтаксиса C# для создания экземпляров массивов также возможно создавать их с помощью статического метода CreateInstance(). Это исключительно удобно, когда заранее неизвестен тип элементов массива, поскольку тип можно передать методу CreateInstance() в параметре как объект Type:

     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
     class Program
     {
     static void Main(string[] args)
     {
     // Создаем массив типа string, длиной 5
     Array myArr = Array.CreateInstance(typeof(string),5);
    
     // Инициализируем первые два поля массива
     myArr.SetValue("Name",0);
     myArr.SetValue("Age",1);
    
     // Считываем данные из массива
     string s = (string)myArr.GetValue(1);
    
     Console.ReadLine();
     }
     }
    }
    

    Обратите внимание, что для установки значений в массив служит метод SetValue(), а для их чтения — метод GetValue().

    Копирование массивов

    Поскольку массивы — это ссылочные типы, присваивание переменной типа массива другой переменной создает две переменных, ссылающихся на один и тот же массив. Для копирования массивов предусмотрена реализация массивами интерфейса ICloneable. Метод Clone(), определенный в этом интерфейсе, создает неглубокую копию массива. Если элементы массива относятся к типу значений, то все они копируются, если массив содержит элементы ссылочных типов, то сами эти элементы не копируются, а копируются лишь ссылки на них.

    Вместо метода Clone() можно также применять метод Array.Сору(), тоже создающий поверхностную копию. Но между Clone() и Сору() есть одно важное отличие: Clone() создает новый массив, а Сору() требует наличия существующего массива той же размерности с достаточным количеством элементов.

     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
     class Program
     {
     static void Main(string[] args)
     {
     string[] arr2 = new string[5];
     // Создаем массив типа string, длиной 5
     Array myArr = Array.CreateInstance(typeof(string),5);
    
     // Инициализируем первые три поля массива
     myArr.SetValue("Name",0);
     myArr.SetValue("Age",1);
     myArr.SetValue("Adress",2);
    
     // Копируем массив с помощью метода Clone()
     string[] arr1 = (string[])myArr.Clone();
    
     foreach (string s in arr1)
     Console.Write("\t"+s);
    
     // Копируем с помощью метода Copy()
     Console.WriteLine();
     Array.Copy(myArr, arr2, myArr.Length);
     foreach (string s in arr2)
     Console.Write("\t"+s);
    
     Console.ReadLine();
     }
     }
    }
    

    Сортировка и поиск

    В классе Array реализован алгоритм быстрой сортировки (Quicksort) элементов массива. Метод Sort() требует от элементов реализации интерфейса IComparable. Простые типы, такие как System.String и System.Int32, реализуют IComparable, так что можно сортировать элементы, относящиеся к этим типам.

    C помощью разных вариантов метода Sort() можно отсортировать массив полностью или в заданных пределах либо отсортировать два массива, содержащих соответствующие пары "ключ-значение". После сортировки в массиве можно осуществить эффективный поиск, используя разные варианты метода BinarySearch().

     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
     class Program
     {
     static void Main(string[] args)
     {
     int[] myArr = { 4, 5, -183, 12, 34, 0, 2 ,-13 };
    
     Console.WriteLine("Исходный массив чисел: ");
     foreach (int x in myArr)
     Console.Write("\t{0}",x);
    
     // Реализуем сортировку массива
     Console.WriteLine("\n\nОтсортированный массив:");
     Array.Sort(myArr);
     foreach (int x in myArr)
     Console.Write("\t{0}",x);
    
     // Организуем поиск числа 12
     Console.WriteLine("\n\nПоиск числа:");
     int search = Array.BinarySearch(myArr, 12);
     Console.WriteLine("Число 12 находится на {0} позиции",search+1);
    
     Console.ReadLine();
     }
     }
    }
    Использование методов sort() и BinarySearch()
     
     
    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz