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

Вход на сайт

Поиск

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

  • Статистика

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

    Массивы в Си-шарп. Класс List 

    Массив – это набор однотипных данных, которые располагаются в памяти последовательно друг за другом. Доступ к элементам массива осуществляется по индексу (номеру) элемента. Массив может содержать элементы любого типа данных, можно даже создавать массив массивов (ступенчатый массив). Количество элементов в массиве называется размером массива. Массивы относятся к ссылочным типам данных.

    Массивы в Си-шарп могут быть одномерными и многомерными. 

    Одномерные массивы

    Одномерный массив по-другому еще называется вектором, и для доступа к его элементам используется только один индекс. Выглядит вектор примерно так:

    одномерный массив в Си-шарп

    В Си-шарп объявление массива имеет такую структуру:

    тип[] имя_массива = new тип[размер массива];

    Пример:

     
    int[] array = new int[5]; // создаем массив целых чисел
    string[] seasons = new string[4] {"зима","весна","лето","осень"}; //объявление массива строк и его инициализация значениями

    Если происходит инициализация, оператор new можно упускать:
     
    string[] seasons = {"зима","весна","лето","осень"}; //корректно

    Доступ к элементам осуществляется по индексу. Следует помнить, что индексация начинается с нуля – первый элемент массива имеет индекс 0, а последний n-1, где n – размер массива.
     
    static void Main(string[] args)
    {
       int[] numbers = new int[5];
       numbers[0] = 5;
       numbers[1] = 2;
       numbers[4] = 3;
       numbers[5] = 2; // ошибка, индекс вне рамок массива
    }

    В качестве массива можно представить, например, список студентов в группе (имена), показатели температуры воздуха за последние несколько дней и так далее.

    Многомерные массивы

    Одним из случаев многомерного массива служит двумерный массив (матрица). В матрице для доступа к элементам необходимо использовать два индекса.

    многомерный массив в Си-шарп

    Количеством индексов, используемых для доступа к элементам массива называется размерность массива.

     
    int[,] numbers1 = new int[2, 2]; // объявление двумерного массива
    int[,,] numbers2 = new int[2, 2 ,3]; // объявление трехмерного массива
    int[,] numbers3 = new int[3, 2] { {6, 0}, 
    {5, 7}, 
    {8, 9} }; // инициализация двумерного массива

    Элементу массива numbers1 с координатами 1,1 присвоим значение 8:
    numbers1[1, 1] = 8;

    Многомерные массивы используются гораздо реже одномерных.

    Приведу немного бредовый пример данных, которые можно было бы представить в качестве двумерного массива:

    Есть матрица 7*4. Строки, которых семь, будут соответствовать дням недели, а 4 столбца - времени дня (00:00, 06:00, 12:00, 18:00). В качестве данных будет температура воздуха.

    Значение температуры с координатами 2,3 будет соответствовать температуре в среду в 18:00. На практике, конечно, такие данные представлялись бы в другом виде, но для примера подойдет.

    Ступенчатые (jagged) массивы в Си-шарп

    Ступенчатый (jagged) массив – это массив массивов. В нем длина каждого массива может быть разной. Примерно это выглядит так:

    ступенчатый массив в Си-шарп

    Пример объявления ступенчатого массива:

     
    static void Main(string[] args)
    {
       int[][] array = new int[3][]; // объявляем массив, который содержит 3 массива
       array [0] = new int[3]; //создание внутреннего массива
       array [1] = new int[2]; 
       array [2] = new int[5];
    }

    Доступ к элементам осуществляется по тому же принципу, как и с многомерными маcсивами, только тут уже участвуют две пары квадратных скобок (продолжение примера выше):
     
    array [0][1] = 5;
    array [1][1] = 8;
    array [1][2] = 5; // ошибка, индекс «2» вне границ массива

    Свойство Length

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

     
    static void Main(string[] args)
    {
       int[] numbers = new int[5];
       int size = numbers.Length; // size = 5 
    }

    Класс List

    Класс List служит для работы со списками, о чем и говорит его название. Это такой «навороченный» массив. Главное отличие от простого массива в том, что он динамический – вы можете вставлять и удалять элементы в любое время, в то время как в простом массиве размер указывается при создании и сделать его больше или меньше нельзя.

     
    static void Main(string[] args)
    {
       List<string> teams = new List<string>(); // создание списка
       teams.Add("Barcelona"); // добавление элемента
       teams.Add("Chelsea");
       teams.Add("Arsenal");
       List<string> teams2 = new List<string>() {"Dynamo", "CSKA" }; // инициализация
    }

    Добавление элементов

    Для добавления элементов в список в нем реализовано несколько методов:

     
    Метод Описание
    Add([элемент]) добавляет элемент в конец списка
    AddRange([список элементов]) добавляет в конец списка элементы указанного списка
    Insert([индекс],[элемент]) вставляет элемент на позицию соответствующую индексу, все элементы «правее» будут сдвинуты на одну позицию
    InsertRange([индекс], [список элементов]) то же самое, только вставляется множество элементов

    Удаление элементов
     
    Метод Описание
    Remove([элемент]) удаляет первое вхождение указанного элемента из списка
    RemoveRange([индекс], [количество]) удаляет указанное количество элементов, начиная с указанной позиции
    RemoveAt([индекс]) удаляет элемент, который находится на указанной позиции
    Clear() удаляет все элементы списка

    Свойство Count соответствует свойству обычного массива – Length – количество элементов.
     
    static void Main(string[] args)
    {
       List<string> teams = new List<string>() { "Inter", "Milan", "Bayern", "Juventus"};
       teams.Insert(2,"Barcelona"); // вставляем в список элемент "Barcelona" на позицию 2
       teams.Remove("Milan"); // удаляем первое вхождение элемента "Milan" из списка 
       List<string> newTeams = new List<string>() { "Liverpool", "Roma", "Borussia", "Valencia" };
       teams.AddRange(newTeams); // добавляем в конец списка элементы списка newTeams
    }

    Стоит помнить, что простые массивы работают быстрее, чем списки List. Если в вашей программе не особо важна производительность и вы не работаете с большими количествами данных, то удобнее использовать список, в противном случае нужно использовать простые массивы.

    Домашнее задание

    Работать с массивами без использования циклов в большинстве случаев нет смысла. О циклах мы поговорим в следующем уроке. А так, пока можете создать разные типы массивов, записать что-то, вывести на экран некоторые элементы массива, попробуйте получить доступ до элемента вне рамок массива. Создайте список, попробуйте добавить элемент в конец списка, вставить элемент по индексу и так далее.
    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz