Назад Вперед Зміст


Колекція List<T>

Існує два способи групування об'єктів: створити масив об'єктів або створити колекцію.

Масиви найзручніше використовувати для створення та роботи з фіксованою кількістю строго типізованих об'єктів.

Колекції надають більш гнучкий спосіб роботи з групами об'єктів. На відміну від масивів, група об'єктів у класі може динамічно збільшуватися та зменшуватися відповідно до потреб програми.

Якщо колекція містить елементи лише одного типу даних, можна використовувати один з класів у просторі імен System.Collections.Generic. Ми будемо використовувати колекцію List<T>.

У колекції List<T> T - тип даних. Усі елементи колекції одного типу.

Клас List<T> реалізується за допомогою масиву, розмір якого динамічно збільшується за потреби.

Доступ до елементів колекції здійснюється за допомогою цілочисельного індексу. Індекси в цій колекції починаються з нуля.

Опис

Колекція List є класом, тому необхідно створити об'єкт цього класу.

Для створення об'єкта класу List використовується конструктор без параметрів:

List<int> chisla = new List<int>();

Об'єкт називається chisla, усі елементи цієї колекції цілого типу.

Методи та властивості

Метод Add

Метод додає елемент у кінець колекції.

У прикладі до колекції chisla додаються випадкові числа з інтервалу (1;20) і виводяться на екран.

Random randomGenerator = new Random();
List<int> numbers = new List();

for (int i = 0; i < 10; i++)
{
    numbers.Add(randomGenerator.Next(1, 20));
    Console.Write("{0} ", numbers[i]);
}

Результат:

Генеруємо список з 10 випадкових чисел від 1 до 20


14 5 19 3 8 12 7 16 10 2 

Властивість Count

Властивість визначає кількість елементів у колекції. Використовується при переборі всіх елементів колекції.

У прикладі у колекції chisla знаходиться максимальне число та його індекс.

У колекції кількість елементів дорівнює chisla.Count

При використанні властивості круглі дужки не використовуються, на відміну від методу.


int maxValue = numbers[0];  // Початкове максимальне значення - перший елемент
int maxIndex = 0;           // Індекс максимального елемента

// Пошук максимального значення у списку
for (int i = 1; i < numbers.Count; i++)
{
    if (numbers[i] > maxValue) 
    {
        maxValue = numbers[i];  // Оновлюємо максимальне значення
        maxIndex = i;           // Оновлюємо індекс максимуму
    }
}

// Виведення результату
Console.WriteLine("\nМаксимальне значення: {0}, його позиція: {1}", maxValue, maxIndex);

Результат:

Максимальне значення: 19, його позиція: 3

Метод Remove

Метод видаляє елемент з колекції за його значенням. Якщо таких чисел кілька, то видалиться лише перше число.

У даному прикладі з колекції chisla видаляється введене з клавіатури число 6. Програма:

// Генератор випадкових чисел
Random random = new Random(); 

// Список для зберігання чисел
List numbers = new List();  

// Заповнення списку 10 випадковими числами від 1 до 10
for (int i = 0; i < 10; i++)
{
    numbers.Add(random.Next(1, 10));
    Console.Write("{0} ", numbers[i]);
}

Console.WriteLine();  // Перехід на новий рядок

// Отримання числа від користувача для видалення
Console.WriteLine("Введіть число для видалення:");
int numberToRemove = Convert.ToInt32(Console.ReadLine());

// Видалення введеного числа зі списку
numbers.Remove(numberToRemove);

// Виведення оновленого списку
Console.WriteLine("Список після видалення:");
for (int i = 0; i < numbers.Count; i++)
    Console.Write("{0} ", numbers[i]);

Видалилася лише перша 6. Результат роботи:

3 7 2 5 5 9 1 2 8 4 
Введіть число для видалення: 5
Список після видалення:
3 7 2 9 1 2 8 4 

Для видалення кількох чисел застосуємо метод Remove у циклі, причому перегляд робитимемо з кінця, щоб не порушити індексацію.

У даному прикладі з колекції chisla видаляються усі числа 8. Програма:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Ініціалізація генератора випадкових чисел
        Random random = new Random();
        
        // Створення списку чисел
        List<int> numbers = new List();
        
        // Заповнення списку 10 випадковими числами (1-10) та їх виведення
        Console.WriteLine("Згенерований список чисел:");
        for (int i = 0; i < 10; i++)
        {
            numbers.Add(random.Next(1, 10));
            Console.Write($"{numbers[i]} ");
        }
        
        Console.WriteLine("\n\nВведіть число для видалення:");
        int numberToDelete = Convert.ToInt32(Console.ReadLine());
        
        // Видалення всіх входжень числа (з кінця до початку)
        Console.WriteLine("\nВидаляємо всі входження числа {numberToDelete}...");
        for (int i = numbers.Count - 1; i >= 0; i--)
        {
            if (numbers[i] == numberToDelete)
                numbers.RemoveAt(i);  // Видалення за індексом ефективніше
        }
        
        // Виведення оновленого списку
        Console.WriteLine("\nСписок після видалення:");
        foreach (int num in numbers)
        {
            Console.Write($"{num} ");
        }
        
        Console.WriteLine("\n\nНатисніть будь-яку клавішу для виходу...");
        Console.ReadKey();
    }
}

Результат роботи:

Згенерований список чисел:
3 7 2 5 5 9 1 2 8 4 

Введіть число для видалення: 5

Видаляємо всі входження числа 5...
Список після видалення:
3 7 2 9 1 2 8 4 

Натисніть будь-яку клавішу для виходу...

Метод RemoveAt

Метод видаляє елемент з колекції за його індексом.

У даному випадку з колекції chisla видаляється число з індексом 5. Це число 7.

// Ініціалізація генератора випадкових чисел
Random randomGen = new Random();

// Створення списку для зберігання чисел
List numbersList = new List();

// Заповнення списку 10 випадковими числами від 1 до 10
Console.WriteLine("Згенерований список чисел:");
for (int i = 0; i < 10; i++)
{
    numbersList.Add(randomGen.Next(1, 10));
    Console.Write("{0} ", numbersList[i]);
}

Console.WriteLine("\n\nВведіть індекс елемента для видалення (0-9):");
int indexToRemove = Convert.ToInt32(Console.ReadLine());

// Видалення елемента за вказаним індексом
if (indexToRemove >= 0 && indexToRemove < numbersList.Count)
{
    numbersList.RemoveAt(indexToRemove);
    
    // Виведення оновленого списку
    Console.WriteLine("\nСписок після видалення:");
    foreach (int number in numbersList)
    {
        Console.Write("{0} ", number);
    }
}
else
{
    Console.WriteLine("Помилка: невірний індекс!");
}

Console.WriteLine("\n\nНатисніть будь-яку клавішу для виходу...");
Console.ReadKey();

Результат роботи:

Згенерований список чисел:Згенерований список чисел:
3 7 2 5 9 1 8 4 6 2 

Введіть індекс елемента для видалення (0-9): 4

Список після видалення:
3 7 2 5 1 8 4 6 2 

Натисніть будь-яку клавішу для виходу...

Заповнимо колекцію випадковими числами і видалимо всі елементи з парними індексами

Для видалення всіх елементів з парними індексами застосуємо метод RemoveAt у циклі, причому перегляд робитимемо з кінця, щоб не порушити індексацію.

// Генератор випадкових чисел
Random randomGenerator = new Random();

// Створення списку чисел
List<int> numbers = new List<int>();

// Заповнення списку 10 випадковими числами (1-20) та їх виведення
Console.WriteLine("Згенерований список чисел:");
for (int i = 0; i < 10; i++)
{
    numbers.Add(randomGenerator.Next(1, 20));
    Console.Write("{0} ", numbers[i]);
}

Console.WriteLine("\n\nВидаляємо елементи з парними індексами...");

// Видалення елементів з парними індексами (з кінця до початку)
for (int i = numbers.Count - 1; i >= 0; i--)
{
    if (i % 2 == 0)
    {
        numbers.RemoveAt(i);
    }
}

// Виведення оновленого списку
Console.WriteLine("\nРезультат після видалення:");
foreach (int num in numbers)
{
    Console.Write("{0} ", num);
}

Console.WriteLine("\n\nНатисніть будь-яку клавішу для виходу...");
Console.ReadKey();

Результат роботи:

Згенерований список чисел:
14 5 19 3 8 12 7 16 10 2 

Видаляємо елементи з парними індексами...

Результат після видалення:
5 3 12 16 2 

Натисніть будь-яку клавішу для виходу...

Метод Insert

Метод додає елемент у середину колекції, перед елементом із зазначеним індексом.

У даному випадку до колекції chisla, перед елементом з індексом k вставляється число x.

// Генератор випадкових чисел
Random random = new Random();

// Створення списку чисел
List<int> numbers = new List<int>();

// Заповнення списку 10 випадковими числами (1-10) та їх виведення
Console.WriteLine("Згенерований список чисел:");
for (int i = 0; i < 10; i++)
{
    numbers.Add(random.Next(1, 10));
    Console.Write("{0} ", numbers[i]);
}

// Отримання даних від користувача
Console.Write("\nВведіть індекс для вставки (0-{0}): ", numbers.Count);
int insertIndex = Convert.ToInt32(Console.ReadLine());

Console.Write("Введіть число для вставки: ");
int numberToInsert = Convert.ToInt32(Console.ReadLine());

// Вставка числа на вказану позицію
if (insertIndex >= 0 && insertIndex <= numbers.Count)
{
    numbers.Insert(insertIndex, numberToInsert);
    
    // Виведення оновленого списку
    Console.WriteLine("\nОновлений список:");
    foreach (int num in numbers)
    {
        Console.Write("{0} ", num);
    }
}
else
{
    Console.WriteLine("Помилка: невірний індекс!");
}

Console.WriteLine("\nНатисніть будь-яку клавішу для виходу...");
Console.ReadKey();

Результат роботи:

Згенерований список чисел:
3 7 2 5 9 1 8 4 6 2 

Введіть індекс для вставки (0-10): 3
Введіть число для вставки: 10

Оновлений список:
3 7 2 10 5 9 1 8 4 6 2 

Натисніть будь-яку клавішу для виходу...

Перед кожним парним числом колекції chisla вставити число x.

Для вставки кількох елементів застосуємо метод Insert у циклі, причому перегляд робитимемо з кінця, щоб не порушити індексацію.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Ініціалізація генератора випадкових чисел
        Random random = new Random();
        
        // Створення списку чисел
        List<int> numbers = new List<int>();
        
        // Заповнення списку 10 випадковими числами (1-10) та їх виведення
        Console.WriteLine("Згенерований список чисел:");
        for (int i = 0; i < 10; i++)
        {
            numbers.Add(random.Next(1, 10));
            Console.Write($"{numbers[i]} ");
        }
        
        // Отримання числа від користувача
        Console.Write("\nВведіть число для вставки: ");
        int numberToInsert = Convert.ToInt32(Console.ReadLine());
        
        // Вставка числа перед кожним парним елементом (з кінця до початку)
        Console.WriteLine($"\nВставляємо {numberToInsert} перед кожним парним числом...");
        for (int i = numbers.Count - 1; i >= 0; i--)
        {
            if (numbers[i] % 2 == 0)
            {
                numbers.Insert(i, numberToInsert);
            }
        }
        
        // Виведення оновленого списку
        Console.WriteLine("\nРезультат після вставки:");
        foreach (int num in numbers)
        {
            Console.Write($"{num} ");
        }
        
        Console.WriteLine("\n\nНатисніть будь-яку клавішу для виходу...");
        Console.ReadKey();
    }
}

Результат роботи:

Згенерований список чисел:
3 7 2 5 9 1 8 4 6 2 

Введіть число для вставки: 0

Вставляємо 0 перед кожним парним числом...

Результат після вставки:
3 7 0 2 5 9 1 0 8 0 4 0 6 0 2 

Натисніть будь-яку клавішу для виходу...

Назад Вперед Зміст