Існує два способи групування об'єктів: створити масив об'єктів або створити колекцію.
Масиви найзручніше використовувати для створення та роботи з фіксованою кількістю строго типізованих об'єктів.
Колекції надають більш гнучкий спосіб роботи з групами об'єктів. На відміну від масивів, група об'єктів у класі може динамічно збільшуватися та зменшуватися відповідно до потреб програми.
Якщо колекція містить елементи лише одного типу даних, можна використовувати один з класів у просторі імен System.Collections.Generic. Ми будемо використовувати колекцію List<T>.
У колекції List<T> T - тип даних. Усі елементи колекції одного типу.
Клас List<T> реалізується за допомогою масиву, розмір якого динамічно збільшується за потреби.
Доступ до елементів колекції здійснюється за допомогою цілочисельного індексу. Індекси в цій колекції починаються з нуля.
Колекція List є класом, тому необхідно створити об'єкт цього класу.
Для створення об'єкта класу List використовується конструктор без параметрів:
| List<int> chisla = new List<int>(); |
|---|
Об'єкт називається chisla, усі елементи цієї колекції цілого типу.
Метод додає елемент у кінець колекції.
У прикладі до колекції 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]);
}
Результат:
14 5 19 3 8 12 7 16 10 2
Властивість визначає кількість елементів у колекції. Використовується при переборі всіх елементів колекції.
У прикладі у колекції 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
Метод видаляє елемент з колекції за його значенням. Якщо таких чисел кілька, то видалиться лише перше число.
У даному прикладі з колекції 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
Натисніть будь-яку клавішу для виходу...
Метод видаляє елемент з колекції за його індексом.
У даному випадку з колекції 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
Натисніть будь-яку клавішу для виходу...
Метод додає елемент у середину колекції, перед елементом із зазначеним індексом.
У даному випадку до колекції 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
Натисніть будь-яку клавішу для виходу...