VirQ. Списки List <T> в C#
Язык C# входит в ТОП-5
самых популярных языков
программирования
Главная /
Учебник
/
Списки List <T>
Статей на сайте: 61

Списки List <T>


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

Списки представляют собой однородную коллекцию значений какого-то типа: чисел, строк или других объектов.
Это может быть список строк файла, список участников мероприятия, список карт в карточной игре на руках у игрока, список слов, загруженных из предложения. Что угодно.
[code] List<int> a = new List<int>(); //Создать список из целых чисел List<double> b = new List<double>(); //Создать список из дробных чисел List<bool> c = new List<bool>(); //Создать список из булевских значений "да"/"нет" List<string> d = new List<string>(); //Создать список строк List<Card> e = new List<Card>(); //Создать список объектов класса, например, Card List<string[]> f = new List<string[]>(); //Создать список массивов List<List<int>> g = new List<List<int>>(); //Создать список числовых списков [/code]
Допустим, мы будем использовать метод Add для добавления нового элемента. Для каждого типа выглядело бы это по-разному. Для последующих методов, которые тут будут рассматриваться, таких, как Remove, RemoveAt, IndexOf, Insert и прочих использовать надо тот же тип.
[code] a.Add(16); b.Add(25.4); c.Add(false); d.Add("Клавиатура"); e.Add(new Card()); f.Add(new string[5]); g.Add(new List<int>()); [/code]
Обобщённо говоря,
[code] List<x> [/code]
означает, что работать мы будем с элементами типа "x". Ниже будут рассмотрены наиболее часто встречающиеся методы и свойства списков.

Метод Add

С помощью метода Add можно добавить элементы в список.
[code] List<int> x = new List<int>(); //Создали пустой список для хранения целых чисел x.Add(5); x.Add(27); x.Add(-6); x.Add(14); x.Add(70); x.Add(14); x.Add(178); [/code]
Таким образом в список были добавлены числа. Каждое из них теперь имеет свой индекс, начиная с 0.
Индекс: 0 1 2 3 4 5 6
Значение: 5 27 -6 14 70 14 178
Другой же, более сокращённый способ будет выглядеть так:
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; [/code]
Чтобы получить первое число, используется индекс со значением 0 (счёт начинается с нуля)
[code] int m = x[0]; //Значение равно 5 int n = x[1]; //Значение равно 27 [/code]
А чтобы изменить значение 3-го элемента (индекс 2) на значение 100, используется такая запись:
[code] x[2] = 100; [/code]

Метод Remove

Метод Remove позволяет удалить из списка элементы с этим значением. Например, попробуем удалить все элементы со значением 14. Будем считать, что у нас добавлены те элементы, что выше
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; x.Remove(14);
[/code]
Тогда будут удалены сразу 2 элемента (под номерами 3 и 5).
Индекс: 0 1 2 3 4 5 6
Значение: 5 27 -6 14 70 14 178
И мы получим список
Индекс: 0 1 2 3 4
Значение: 5 27 -6 70 178
Обратите внимание, что индексы так же идут по порядку. Все элементы, что находились "правее", сдвинулись влево.

Метод RemoveAt

Данный метод позволяет удалить элемент с определённым индексом
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; x.RemoveAt(2); //Будет удалён 3-ий элемент по счёту
[/code]
Если считать, что последний список перед выполнением RemoveAt был такой:
Индекс: 0 1 2 3 4 5 6
Значение: 5 27 -6 14 70 14 178
то тогда после выполнения вышеуказанной команды получаем
Индекс: 0 1 2 3 4 5
Значение: 5 27 14 70 14 178

Свойство Count

Считает количество элементов в списке
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; int n = x.Count; //7 элементов
int m = x.Count - 1; //Получить индекс последнего элемента
[/code]
Обратите внимание, что если в списке 4 элемента (0,1,2,3), то последний - это индекс №3.
Для 20 элементов последним будет 19-ый
Для 100 элементов последний - 99-ый и т.д.

Метод Insert

Позволяет вставить новый элемент в определённую позицию. Скажем, мы хотим перед вторым (1-ым по индексу) элементом вставить число 1000. Вставив число, все остальные, что после него, сдвинутся на 1 элемент правее. Пишется это так:
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; x.Insert(1, 1000);
[/code]
Получим такой список
Индекс: 0 1 2 3 4 5 6 7
Значение: 5 1000 27 -6 14 70 14 178

Метод IndexOf

Данное свойство позволяет определить, есть ли в списке элемент с этим значением.
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; int a = x.IndexOf(5); //Получим 0-ую позицию
int b = x.IndexOf(-6); //Получим 2-ую позицию
int k = x.IndexOf(70); //Получим 4-ую позицию
int q = x.IndexOf(166); //Получим -1
[/code]
Метод IndexOf находит позицию элемента в списке. Если найти не удалось, будет возвращено значение -1.

Другие методы коротко в примерах

[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; x.Reverse(); //Получить обратный порядок элементов, т.е. 178, 14, 70, 14, -6, 27, 51
x.Sort(); //Сортировать элементы по порядку с увеличением
int a = x.Min(); //Найти наименьшее значение в списке. Получим -6
int b = x.Max(); //Найти наибольшее значение в списке. Получим 178
int c = x.Sum(); //Найти сумму элементов. Получим 302
int d = x.Average(); //Найти среднее значение чисел. Получим примерно 43,14
[/code]
Простой способ сортировать числа в порядке убывания, это сперва отсортировать из в порядке увеличения методом Sort, а потом методом Reverse перевернуть список в обратную строну.
[code] List<int> x = new List<int>() { 5, 27, -6, 14, 70, 14, 178 }; x.Sort(); //Сортировать элементы по порядку с увеличением
x.Reverse(); //Получить обратный порядок элементов, т.е. 178, 70, 27, 14, 14, 5, -6
[/code]

Списки содержат огромное количество методов и свойств. Их можно увидеть в IntelliSense.



Дополнительная информация о том, как вывести результат в консоли или WinForm