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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Массивы в C#

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

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

csharpCopy code// Одномерный массив целых чисел
int[] myArray;

// Инициализация массива
myArray = new int[5]; // Создание массива из 5 элементов

// Инициализация и объявление в одной строке
int[] myInitializedArray = new int[] { 1, 2, 3, 4, 5 };

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

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

csharpCopy codeint[] myArray = { 10, 20, 30, 40, 50 };

// Доступ к элементам массива
int firstElement = myArray[0];   // 10
int thirdElement = myArray[2];   // 30

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

csharpCopy codemyArray[1] = 25; // Изменение второго элемента на 25

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

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

csharpCopy codeint[,] twoDimensionalArray = new int[3, 4]; // 3 строки, 4 столбца

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

csharpCopy codetwoDimensionalArray[0, 1] = 10; // Задание значения для элемента в первой строке и втором столбце

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

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

csharpCopy codeint[] myArray = { 1, 2, 3, 4, 5 };

int arrayLength = myArray.Length; // 5

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

csharpCopy codeint[] sourceArray = { 1, 2, 3, 4, 5 };
int[] destinationArray = new int[5];

sourceArray.CopyTo(destinationArray, 0); // Копирование элементов из sourceArray в destinationArray, начиная с индекса 0

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

csharpCopy codeint[] originalArray = { 1, 2, 3, 4, 5 };
int[] clonedArray = (int[])originalArray.Clone(); // Создание копии массива

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

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

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

IEnumerable

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

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

csharpCopy codeusing System;
using System.Collections;

class Program
{
    static void Main()
    {
        ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };

        // Использование foreach с IEnumerable
        foreach (int item in list)
        {
            Console.WriteLine(item);
        }
    }
}

ICollection

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

csharpCopy codeusing System;
using System.Collections;

class Program
{
    static void Main()
    {
        ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };

        // Использование методов ICollection
        list.Add(6);
        list.Remove(3);

        Console.WriteLine($"Contains 2: {list.Contains(2)}");
    }
}

IList

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

csharpCopy codeusing System;
using System.Collections;

class Program
{
    static void Main()
    {
        ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };

        // Использование методов IList
        int index = list.IndexOf(4);
        list.Insert(index, 10);

        Console.WriteLine($"Element at index {index}: {list[index]}");
    }
}

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

List<T>

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> myList = new List<int>() { 1, 2, 3, 4, 5 };

        // Добавление элемента
        myList.Add(6);

        // Удаление элемента
        myList.Remove(3);

        // Итерация по списку
        foreach (int item in myList)
        {
            Console.WriteLine(item);
        }
    }
}

Dictionary<TKey, TValue>

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<string, int> myDictionary = new Dictionary<string, int>();

        // Добавление элемента
        myDictionary.Add("One", 1);

        // Получение элемента по ключу
        int value = myDictionary["One"];

        // Проверка наличия ключа
        bool containsKey = myDictionary.ContainsKey("Two");

        Console.WriteLine($"Value for key 'One': {value}");
        Console.WriteLine($"Contains key 'Two': {containsKey}");
    }
}

Queue<T>

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<string> myQueue = new Queue<string>();

        // Добавление элемента в очередь
        myQueue.Enqueue("First");
        myQueue.Enqueue("Second");
        myQueue.Enqueue("Third");

        // Извлечение элемента из очереди
        string firstItem = myQueue.Dequeue();

        Console.WriteLine($"First item: {firstItem}");
    }
}

Stack<T>

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<int> myStack = new Stack<int>();

        // Добавление элемента в стек
        myStack.Push(1);
        myStack.Push(2);
        myStack.Push(3);

        // Извлечение элемента из стека
        int poppedItem = myStack.Pop();

        Console.WriteLine($"Popped item: {poppedItem}");
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> myCollection = new List<string>() { "One", "Two", "Three" };

        // Добавление элемента
        myCollection.Add("Four");

        // Удаление элемента
        myCollection.Remove("Two");

        // Проверка наличия элемента
        bool containsElement = myCollection.Contains("Three");

        Console.WriteLine($"Contains element 'Three': {containsElement}");
    }
}

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

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

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

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

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

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

csharpCopy codeusing System;

class Program
{
    static void Main()
    {
        int[] myArray = { 1, 2, 3, 4, 5 };

        // Итерация по массиву с использованием цикла for
        for (int i = 0; i < myArray.Length; i++)
        {
            Console.WriteLine(myArray[i]);
        }
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> myCollection = new List<string>() { "One", "Two", "Three" };

        // Итерация по коллекции с использованием цикла for
        for (int i = 0; i < myCollection.Count; i++)
        {
            Console.WriteLine(myCollection[i]);
        }
    }
}

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

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

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

csharpCopy codeusing System;

class Program
{
    static void Main()
    {
        int[] myArray = { 1, 2, 3, 4, 5 };

        // Итерация по массиву с использованием foreach
        foreach (int item in myArray)
        {
            Console.WriteLine(item);
        }
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> myCollection = new List<string>() { "One", "Two", "Three" };

        // Итерация по коллекции с использованием foreach
        foreach (string item in myCollection)
        {
            Console.WriteLine(item);
        }
    }
}

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

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

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

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

csharpCopy codeusing System;

class Program
{
    static void Main()
    {
        int[] myArray = { 5, 3, 1, 4, 2 };

        // Сортировка массива
        Array.Sort(myArray);

        // Вывод отсортированного массива
        foreach (int item in myArray)
        {
            Console.WriteLine(item);
        }
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> myList = new List<int>() { 5, 3, 1, 4, 2 };

        // Сортировка коллекции
        myList.Sort();

        // Вывод отсортированной коллекции
        foreach (int item in myList)
        {
            Console.WriteLine(item);
        }
    }
}

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

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

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

csharpCopy codeusing System;

class Program
{
    static void Main()
    {
        int[] myArray = { 1, 2, 3, 4, 5 };

        // Поиск индекса элемента в массиве
        int index = Array.IndexOf(myArray, 3);

        Console.WriteLine($"Index of element 3: {index}");
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> myCollection = new List<string>() { "One", "Two", "Three" };

        // Проверка наличия элемента в коллекции
        bool containsElement = myCollection.Contains("Two");

        Console.WriteLine($"Contains element 'Two': {containsElement}");
    }
}

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

Работа с коллекциями в 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 используется для фильтрации элементов коллекции, основываясь на условии.

csharpCopy codeusing System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        // Выбор только четных чисел
        var evenNumbers = numbers.Where(n => n % 2 == 0);

        // Вывод результата
        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

Оператор Select:

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

csharpCopy codeusing System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

        // Проекция: умножение каждого числа на 2
        var doubledNumbers = numbers.Select(n => n * 2);

        // Вывод результата
        foreach (var number in doubledNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

Оператор OrderBy:

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

csharpCopy codeusing System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 3, 8, 1, 7 };

        // Сортировка чисел по возрастанию
        var sortedNumbers = numbers.OrderBy(n => n);

        // Вывод результата
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

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

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

csharpCopy codeusing System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 3, 8, 1, 7 };

        // Выбор и сортировка четных чисел
        var result = numbers
            .Where(n => n % 2 == 0)    // Фильтрация четных чисел
            .OrderBy(n => n);          // Сортировка по возрастанию

        // Вывод результата
        foreach (var number in result)
        {
            Console.WriteLine(number);
        }
    }
}

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

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

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

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

csharpCopy codeusing System;

class Program
{
    static void Main()
    {
        // Использование массива для хранения имен студентов
        string[] studentNames = { "Alice", "Bob", "Charlie", "David" };

        // Вывод списка студентов
        Console.WriteLine("Список студентов:");
        foreach (var name in studentNames)
        {
            Console.WriteLine(name);
        }
    }
}

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

csharpCopy codeusing System;

class Program
{
    static void Main()
    {
        // Использование массива для хранения оценок студентов
        int[] grades = { 90, 85, 92, 88, 95 };

        // Вычисление средней оценки
        double averageGrade = 0;
        foreach (var grade in grades)
        {
            averageGrade += grade;
        }
        averageGrade /= grades.Length;

        // Вывод результата
        Console.WriteLine($"Средняя оценка: {averageGrade}");
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Использование List для хранения и обработки данных
        List<string> fruits = new List<string> { "Apple", "Banana", "Orange" };

        // Добавление нового фрукта
        fruits.Add("Grapes");

        // Удаление фрукта по индексу
        fruits.RemoveAt(1);

        // Вывод обновленного списка фруктов
        Console.WriteLine("Список фруктов:");
        foreach (var fruit in fruits)
        {
            Console.WriteLine(fruit);
        }
    }
}

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

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

csharpCopy codeusing System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 3, 8, 1, 7 };

        // Выбор и сортировка четных чисел
        var result = numbers
            .Where(n => n % 2 == 0)    // Фильтрация четных чисел
            .OrderBy(n => n);          // Сортировка по возрастанию

        // Вывод результата
        Console.WriteLine("Отфильтрованные и отсортированные числа:");
        foreach (var number in result)
        {
            Console.WriteLine(number);
        }
    }
}

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

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

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

csharpCopy codeint[] numbers = { 1, 2, 3, 4, 5 };

// Плохо
for (int i = 0; i < numbers.Length; i++)
{
    Console.WriteLine(numbers[i]);
}

// Хорошо
foreach (var number in numbers)
{
    Console.WriteLine(number);
}

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

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

csharpCopy codeList<string> fruits = new List<string> { "Apple", "Banana", "Orange" };

// Плохо
foreach (var fruit in fruits)
{
    if (fruit == "Banana")
    {
        fruits.Remove(fruit);  // Приведет к ошибке!
    }
}

// Хорошо
foreach (var fruit in fruits.ToList())
{
    if (fruit == "Banana")
    {
        fruits.Remove(fruit);  // Безопасное удаление
    }
}

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

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

csharpCopy code// Пример использования HashSet для уникальных значений
HashSet<int> uniqueNumbers = new HashSet<int> { 1, 2, 3, 1, 4, 5 };

// Пример использования Dictionary для хранения пар ключ-значение
Dictionary<string, int> ages = new Dictionary<string, int>
{
    { "Alice", 25 },
    { "Bob", 30 },
    { "Charlie", 22 }
};

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



Упражнения

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

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

Решение
// Упражнение 1: Работа с массивами
using System;

class Program
{
    static void Main()
    {
        // Создание массива и заполнение значениями
        int[] numbers = { 1, 2, 3, 4, 5 };

        // Вычисление и вывод суммы элементов массива
        int sum = 0;
        foreach (int number in numbers)
        {
            sum += number;
        }

        Console.WriteLine($"Сумма элементов массива: {sum}");
    }
}

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

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

Решение
// Упражнение 2: Работа с коллекцией List
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Создание и заполнение коллекции List
        List<string> names = new List<string> { "Анна", "Иван", "Мария" };

        // Вывод элементов коллекции на экран
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }
    }
}

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

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

Решение
// Упражнение 3: Поиск элемента в массиве
using System;

class Program
{
    static void Main()
    {
        // Создание массива строк
        string[] words = { "apple", "banana", "orange", "grape" };

        // Ввод значения для поиска
        Console.Write("Введите слово для поиска: ");
        string searchWord = Console.ReadLine();

        // Проверка наличия введенного значения в массиве
        bool found = false;
        foreach (string word in words)
        {
            if (word == searchWord)
            {
                found = true;
                break;
            }
        }

        // Вывод результата
        if (found)
        {
            Console.WriteLine($"Слово '{searchWord}' найдено в массиве.");
        }
        else
        {
            Console.WriteLine($"Слово '{searchWord}' не найдено в массиве.");
        }
    }
}

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

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

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

class Program
{
    static void Main()
    {
        // Создание двумерного массива и заполнение значений
        int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

        // Вывод суммы элементов каждой строки
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            int sum = 0;
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                sum += matrix[i, j];
            }
            Console.WriteLine($"Сумма элементов строки {i + 1}: {sum}");
        }
    }
}

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

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

Решение
// Упражнение 5: Использование коллекции Dictionary
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Создание и заполнение коллекции Dictionary
        Dictionary<string, string> translations = new Dictionary<string, string>
        {
            { "apple", "яблоко" },
            { "banana", "банан" },
            { "orange", "апельсин" }
        };

        // Вывод элементов коллекции на экран
        foreach (var pair in translations)
        {
            Console.WriteLine($"{pair.Key} - {pair.Value}");
        }
    }
}

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

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

Решение
// Упражнение 6: Сортировка массива
using System;

class Program
{
    static void Main()
    {
        // Создание массива чисел
        int[] numbers = { 5, 3, 8, 1, 2 };

        // Сортировка массива
        Array.Sort(numbers);

        // Вывод отсортированного массива
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
        Console.WriteLine();
    }
}

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

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

Решение
// Упражнение 7: Удаление элемента из коллекции List
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Создание и заполнение коллекции List строк
        List<string> colors = new List<string> { "red", "blue", "green", "red", "yellow" };

        // Вывод элементов коллекции на экран
        Console.WriteLine("Исходная коллекция:");
        foreach (string color in colors)
        {
            Console.Write(color + " ");
        }
        Console.WriteLine();

        // Ввод значения для удаления
        Console.Write("Введите цвет для удаления: ");
        string colorToRemove = Console.ReadLine();

        // Удаление всех вхождений введенного значения из списка
        colors.RemoveAll(c => c == colorToRemove);

        // Вывод измененной коллекции на экран
        Console.WriteLine("Измененная коллекция:");
        foreach (string color in colors)
        {
            Console.Write(color + " ");
        }
        Console.WriteLine();
    }
}

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

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

Решение
// Упражнение 8: Работа с коллекцией HashSet
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Создание и заполнение коллекции HashSet числами
        HashSet<int> numbers = new HashSet<int> { 1, 3, 5, 7, 9 };

        // Вывод элементов коллекции на экран
        Console.Write("Введите число для проверки наличия в коллекции: ");
        int userNumber = int.Parse(Console.ReadLine());

        // Проверка наличия введенного числа в коллекции HashSet
        if (numbers.Contains(userNumber))
        {
            Console.WriteLine($"Число {userNumber} содержится в коллекции.");
        }
        else
        {
            Console.WriteLine($"Число {userNumber} не содержится в коллекции.");
        }
    }
}

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

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

Решение
// Упражнение 9: Многомерные коллекции
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Создание List<List<int>> для представления таблицы умножения
        List<List<int>> multiplicationTable = new List<List<int>>();

        // Заполнение таблицы умножения значениями
        for (int i = 1; i <= 10; i++)
        {
            List<int> row = new List<int>();
            for (int j = 1; j <= 10; j++)
            {
                row.Add(i * j);
            }
            multiplicationTable.Add(row);
        }

        // Вывод таблицы умножения на экран
        foreach (List<int> row in multiplicationTable)
        {
            foreach (int value in row)
            {
                Console.Write($"{value}\t");
            }
            Console.WriteLine();
        }
    }
}

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

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

Решение
// Упражнение 10: Работа с коллекцией Queue
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Создание и работа с коллекцией Queue
        Queue<string> queue = new Queue<string>();

        // Добавление элементов в очередь
        queue.Enqueue("Первый");
        queue.Enqueue("Второй");
        queue.Enqueue("Третий");

        // Вывод элементов очереди на экран
        Console.WriteLine("Элементы очереди:");
        foreach (string item in queue)
        {
            Console.WriteLine(item);
        }

        // Извлечение и вывод первого элемента
        string removedItem = queue.Dequeue();
        Console.WriteLine($"Извлеченный элемент: {removedItem}");
    }
}

Вопросы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Тесты

Last updated