Научитесь управлять коллекциями данных с использованием универсального типа списка
Это руководство поможет в интерактивном изучении C#. С помощью браузера вы напишете код C# и сможете просмотреть результаты его компиляции и выполнения. Он содержит ряд уроков, где вы создаете, меняете и изучаете коллекции и массивы.
Совет
Чтобы вставить фрагмент кода в режим фокусировки, следует использовать сочетание клавиш (CTRL + v или cmd + v).
Создание списков
Запустите приведенный ниже код в интерактивном окне. Нажмите кнопку Перейти в режим фокусировки. Затем введите следующий блок кода в интерактивном окне (замените <name>
своим именем) и нажмите кнопку Выполнить:
var names = new List<string> { "<name>", "Ana", "Felipe" };
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Если выполнение происходит в вашей среде, следуйте инструкциям для локальной версии.
Вы создали список строк, добавили три имени в этот список и вывели имена прописными буквами. Для циклического прохода по списку вы примените концепции, которые изучили в предыдущих руководствах.
В коде для отображения имен используется функция интерполяции строк. Если перед string
добавить символ $
, код C# можно внедрять в объявление строки. Фактическая строка заменяет код C# генерируемым значением. В этом примере она заменяет {name.ToUpper()}
именами, буквы каждого из которых преобразованы в прописные, так как вызван метод String.ToUpper.
Продолжим изучение.
Изменение содержимого списка
В созданной коллекции используется тип List<T>. При применении такого типа сохраняются последовательности элементов. Тип элементов указывается в угловых скобках.
Важный аспект типа List<T> — возможность увеличения или уменьшения, что позволяет добавлять или удалять элементы. Вы можете просмотреть результаты, изменив содержимое после его отображения. Добавьте следующий код после кода, который вы уже написали (ниже цикла, который выводит содержимое):
Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
В конец списка добавлены еще два имени. При этом одно имя удалено. Выходные данные из этого блока кода показывают начальное содержимое, а затем выводят пустую строку и новое содержимое.
List<T> позволяет добавлять ссылки на отдельные элементы по индексу. Доступ к элементам осуществляется при помощи токенов [
и ]
. Добавьте следующий фрагмент после написанного кода и протестируйте результат:
Console.WriteLine($"My name is {names[0]}.");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list.");
Доступ за пределами списка не предоставляется. Вы можете проверить, как долго в списке используется свойство Count. Добавьте следующий код, чтобы протестировать его:
Console.WriteLine($"The list has {names.Count} people in it");
Снова нажмите кнопку Выполнить, чтобы просмотреть результаты. В C# индексы начинаются с 0, поэтому максимальный допустимый индекс меньше, чем число элементов в списке.
Поиск по спискам и их сортировка
В наших примерах используются сравнительно небольшие списки. Но приложения часто создают списки с гораздо большим количеством элементов, иногда они исчисляются в тысячах. Чтобы найти элементы в таких больших коллекциях, необходимо выполнить поиск различных элементов по списку. Метод IndexOf выполняет поиск элемента и возвращает его индекс. Если элемент отсутствует в списке, IndexOf
возвращает -1
. Попробуйте, чтобы узнать, как это работает. Добавьте следующий фрагмент после написанного кода:
var index = names.IndexOf("Felipe");
if (index != -1)
{
Console.WriteLine($"The name {names[index]} is at index {index}");
}
var notFound = names.IndexOf("Not Found");
Console.WriteLine($"When an item is not found, IndexOf returns {notFound}");
Мы не всегда можем знать, присутствует ли элемент в списке, поэтому нужно обязательно проверять индекс, возвращенный IndexOf. Если он имеет значение -1
, элемент не найден.
Кроме того, можно сортировать элементы в списке. Метод Sort сортирует все элементы списка в обычном порядке (строки — в алфавитном). Добавьте следующий фрагмент и снова выполните код:
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Списки других типов
Вы уже использовали в списках тип string
. Создадим List<T> с использованием другого типа. Сначала создадим набор чисел. Удалите код, который вы написали, и замените его следующим кодом:
var fibonacciNumbers = new List<int> {1, 1};
Будет создан список целых чисел. Для первых двух целых чисел будет задано значение 1. Последовательность Фибоначчи, последовательность чисел, начинается с двух единиц. Каждое следующее число Фибоначчи — это сумма двух предыдущих чисел. Добавьте этот код:
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
fibonacciNumbers.Add(previous + previous2);
foreach(var item in fibonacciNumbers)
{
Console.WriteLine(item);
}
Нажмите кнопку Выполнить, чтобы просмотреть результаты.
Задача
Попробуйте объединить некоторые идеи из этого и предыдущих занятий. Расширьте код с числами Фибоначчи, который вы создали. Напишите и протестируйте код для создания первых 20 чисел в последовательности. Подсказка: 20-е число Фибоначчи — 6765.
Выполнение задачи
В результате получилось нечто подобное?
var fibonacciNumbers = new List<int> {1, 1};
while (fibonacciNumbers.Count < 20)
{
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
fibonacciNumbers.Add(previous + previous2);
}
foreach(var item in fibonacciNumbers)
{
Console.WriteLine(item);
}
При каждой итерации цикла суммируются два последних целых числа в списке. Полученное значение добавляется в список. Цикл повторяется, пока в список не будут добавлены 20 элементов.
Поздравляем!
Вы выполнили все задачи в интерактивном руководстве. Это последний документ из серии интерактивных вводных руководств по C#. Вы можете скачать пакет SDK для .NET на сайте .NET, создать проект на своем компьютере и продолжать писать код. В разделе "Дальнейшие действия" вы вернетесь к этим учебникам.
Дополнительные сведения о коллекциях .NET см. в следующих статьях:
Возникла проблема с этим разделом? Если это так, отправьте нам отзыв, чтобы мы исправили этот раздел.