🗃️Массивы и коллекции

В этой главе вы познакомитесь с массивами и коллекциями, изучите различные типы данных, а также научитесь эффективно использовать их в различных сценариях программирования

Введение в массивы и коллекции

В мире программирования массивы и коллекции являются ключевыми структурами данных, предоставляющими эффективные способы хранения и управления множеством элементов. Эти структуры данных позволяют организовать информацию и обеспечивают множество операций для удобного доступа и манипуляций.

Определение массивов и коллекций

Массивы: Массив - это упорядоченный набор элементов одного типа, которые могут быть легко идентифицированы по их индексам. В C# массивы могут быть одномерными или многомерными и предоставляют удобный способ хранения и доступа к данным.

Коллекции: Коллекции представляют собой более гибкий и расширяемый способ хранения данных. В C# коллекции реализуют различные интерфейсы, такие как IEnumerable, ICollection и IList, предоставляя разнообразные функциональные возможности для работы с данными.

Различия между массивами и коллекциями

  • Фиксированный размер vs. Динамическое расширение:

    • Массивы имеют фиксированный размер, который определяется при их создании.

    • Коллекции могут динамически увеличиваться или уменьшаться в размере в процессе выполнения программы.

  • Типы данных элементов:

    • Массивы хранят элементы только одного типа данных.

    • Коллекции могут содержать элементы различных типов данных.

  • Индексация:

    • Элементы массива доступны по индексу, который начинается с нуля.

    • Коллекции также могут поддерживать индексацию, но не все коллекции обязательно ее поддерживают.

Преимущества использования массивов и коллекций

Преимущества массивов:

  • Простота использования и быстрый доступ к элементам по индексу.

  • Отличная производительность при известном статическом размере.

Преимущества коллекций:

  • Гибкость в управлении размером и структурой данных.

  • Широкий выбор встроенных коллекций, упрощающих многие задачи.

  • Встроенная поддержка LINQ (Language Integrated Query) для удобного запроса и обработки данных.

Выбор между массивами и коллекциями зависит от конкретной задачи и требований к хранению и обработке данных в приложении.

Массивы в C#

Определение и объявление массивов

Определение массивов: Массив в C# — это структура данных, которая представляет собой упорядоченный набор элементов одного типа. Для объявления массива в C# используется следующий синтаксис:

Индексация и доступ к элементам массива

Индексация массива: Элементы массива нумеруются с нуля. Для доступа к элементам используется их индекс:

Изменение элементов массива: Элементы массива можно изменять:

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

Определение многомерных массивов: C# поддерживает создание многомерных массивов. Например, двумерный массив:

Индексация многомерных массивов: Доступ к элементам двумерного массива осуществляется с помощью двух индексов:

Методы массивов: Length, CopyTo, Clone

Метод Length: Свойство Length возвращает количество элементов в массиве:

Метод CopyTo: Метод CopyTo копирует элементы массива в другой массив:

Метод Clone: Метод Clone создает новый массив, являющийся точной копией существующего массива:

Массивы в C# предоставляют эффективный и удобный способ работы с коллекциями данных, а знание и использование методов таких как Length, CopyTo, и Clone обогащает функциональность работы с массивами.

Коллекции в C#

Общие интерфейсы коллекций: IEnumerable, ICollection, IList

IEnumerable

Интерфейс IEnumerable предоставляет базовую функциональность для перебора элементов коллекции. Он включает в себя метод GetEnumerator(), который возвращает объект, реализующий интерфейс IEnumerator.

Пример использования IEnumerable:

ICollection

Интерфейс ICollection расширяет IEnumerable и добавляет базовые методы для управления коллекцией, такие как Add, Clear, Contains, CopyTo, Remove.

IList

Интерфейс IList расширяет ICollection и добавляет методы для работы с элементами по индексу, такие как IndexOf, Insert, RemoveAt.

Примеры стандартных коллекций: List, Dictionary, Queue, Stack

List<T>

List<T> представляет собой динамический массив, который автоматически расширяется при добавлении элементов.

Dictionary<TKey, TValue>

Dictionary<TKey, TValue> представляет собой коллекцию пар ключ-значение, где каждый ключ должен быть уникален.

Queue<T>

Queue<T> представляет собой очередь элементов, работающую по принципу "первым пришел — первым вышел" (FIFO).

Stack<T>

Stack<T> представляет собой стек элементов, работающий по принципу "последним пришел — первым вышел" (LIFO).

Работа с коллекциями: добавление, удаление, поиск элементов

Рассмотрим общие методы для работы с коллекциями: Add, Remove, Contains.

Методы Add и Remove используются для добавления и удаления элементов из коллекции. Метод Contains проверяет, содержится ли элемент в коллекции.

Коллекции в C# предоставляют удобные средства для организации данных и обеспечивают широкие возможности по управлению и работе с элементами.

Итерация по массивам и коллекциям

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

Итерация по массиву с использованием цикла for:

Цикл for предоставляет возможность последовательного обхода элементов массива по индексам. Обратите внимание, что индексы начинаются с 0, и цикл выполняется до значения Length - 1.

Итерация по коллекции с использованием цикла for:

Для коллекций, имеющих свойство Count, можно использовать цикл for аналогичным образом.

Использование ключевого слова foreach

Итерация по массиву с использованием foreach:

Ключевое слово foreach предоставляет удобный способ перебора элементов массива или коллекции без явного использования индексов. Это особенно полезно, когда порядок перебора не важен.

Итерация по коллекции с использованием foreach:

foreach также применим к коллекциям, реализующим интерфейс IEnumerable.

Сортировка и поиск в массивах и коллекциях

Методы сортировки для массивов и коллекций

Сортировка массива с использованием метода Array.Sort:

Массивы в C# предоставляют метод Sort(), который позволяет отсортировать элементы в порядке возрастания.

Сортировка коллекции с использованием метода List.Sort:

List<T> также предоставляет метод Sort(), который используется для сортировки элементов.

Поиск элементов: методы IndexOf, Contains

Поиск элемента в массиве с использованием метода Array.IndexOf:

Массивы поддерживают метод IndexOf, который возвращает индекс первого вхождения элемента или -1, если элемент не найден.

Поиск элемента в коллекции с использованием метода List.Contains:

Коллекции, реализующие интерфейс ICollection<T>, обычно предоставляют метод Contains, который проверяет наличие элемента.

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

Работа с коллекциями в LINQ

Введение в LINQ

LINQ (Language Integrated Query) представляет собой набор языковых расширений в C#, которые добавляют возможности для выполнения запросов к данным наподобие SQL запросов. LINQ позволяет удобно и эффективно работать с различными источниками данных, включая массивы, коллекции, базы данных и другие.

LINQ состоит из двух основных частей:

  1. LINQ to Objects: Предоставляет возможности для выполнения запросов к объектам и коллекциям в памяти.

  2. LINQ to SQL, LINQ to Entities: Предоставляют возможности для выполнения запросов к базам данных.

Основные операции LINQ: Where, Select, OrderBy

Оператор Where:

Оператор Where используется для фильтрации элементов коллекции, основываясь на условии.

Оператор Select:

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

Оператор OrderBy:

Оператор OrderBy используется для сортировки элементов коллекции по возрастанию.

Применение LINQ к коллекциям

LINQ часто применяется для выполнения сложных запросов к коллекциям. Например, объединение операторов Where, Select и OrderBy:

Этот код выбирает только четные числа из списка и сортирует их по возрастанию. LINQ предоставляет мощные инструменты для упрощения кода и выполнения операций с коллекциями.

Практические примеры использования массивов и коллекций

Сценарии применения массивов

Пример 1: Хранение и обработка данных о студентах.

Пример 2: Обработка оценок студентов.

Эффективное использование коллекций

Пример: Добавление и удаление элементов из списка.

Решение задач: фильтрация, сортировка, поиск

Пример: Фильтрация и сортировка чисел.

Лучшие практики при работе с массивами и коллекциями

Оптимизация доступа к элементам массивов

  • Использование foreach: При итерации по всем элементам массива предпочтительнее использовать ключевое слово foreach вместо цикла for, так как оно обеспечивает безопасный доступ к элементам.

Избегание изменения коллекций в процессе итерации

  • Использование копии коллекции: Если необходимо изменять коллекцию в процессе итерации, создайте ее копию, чтобы избежать ошибок.

Выбор правильной коллекции для конкретной задачи

  • List vs. HashSet vs. Dictionary: Выбирайте коллекцию в зависимости от требований задачи. Например, List подходит для хранения упорядоченных элементов, HashSet - для уникальных элементов без порядка, Dictionary - для пар ключ-значение.

Эти практики помогут улучшить читаемость кода, повысить его эффективность и избежать распространенных ошибок при работе с массивами и коллекциями.



Упражнения

Упражнение 1: Работа с массивами

Создайте массив целых чисел и заполните его значениями. Выведите на экран сумму всех элементов массива.

Решение

Упражнение 2: Работа с коллекцией List

Используя коллекцию List, добавьте несколько строковых значений (например, имен) и выведите их на экран.

Решение

Упражнение 3: Поиск элемента в массиве

Создайте массив строк и попросите пользователя ввести значение для поиска. Проверьте, содержится ли введенное значение в массиве, и выведите соответствующее сообщение.

Решение

Упражнение 4: Работа с двумерным массивом

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

Решение

Упражнение 5: Использование коллекции Dictionary

Создайте коллекцию Dictionary для хранения пар ключ-значение (например, слово-перевод). Добавьте несколько элементов и выведите их на экран.

Решение

Упражнение 6: Сортировка массива

Создайте массив чисел и отсортируйте его в порядке возрастания. Выведите отсортированный массив на экран.

Решение

Упражнение 7: Удаление элемента из коллекции List

Создайте коллекцию List строк и попросите пользователя ввести значение для удаления. Удалите все вхождения этого значения из списка и выведите результат.

Решение

Упражнение 8: Работа с коллекцией HashSet

Используя коллекцию HashSet, добавьте несколько чисел и проверьте, содержится ли число, введенное пользователем, в этой коллекции.

Решение

Упражнение 9: Многомерные коллекции

Создайте List<List<int>> для представления таблицы умножения. Заполните его значениями и выведите таблицу на экран.

Решение

Упражнение 10: Работа с коллекцией Queue

Создайте коллекцию Queue для моделирования очереди. Добавьте несколько элементов, выведите их на экран, а затем извлеките и выведите первый элемент.

Решение

Вопросы

Работа с массивами

Как создать массив целых чисел и заполнить его значениями в языке программирования C#?

Работа с коллекцией List

Как добавить элементы в коллекцию List в C#?

Поиск элемента в массиве

Как осуществить поиск определенного значения в массиве и определить, содержится ли это значение в нем?

Работа с двумерным массивом

Как объявить и заполнить двумерный массив в C#? Как вывести сумму элементов каждой строки?

Использование коллекции Dictionary

Как создать и использовать коллекцию Dictionary для хранения пар ключ-значение?

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

Как выполнить сортировку массива в порядке возрастания в языке программирования C#?

Удаление элемента из коллекции List

Как удалить все вхождения определенного элемента из коллекции List в C#?

Работа с коллекцией HashSet

Как создать и использовать коллекцию HashSet в C#? Как проверить, содержится ли значение в HashSet?

Многомерные коллекции

Как создать и заполнить многомерную коллекцию List<List<int>> в C#?

Работа с коллекцией Queue

Как создать и использовать коллекцию Queue в C#? Как извлечь и вывести первый элемент из очереди?


Тесты

Last updated

Was this helpful?