
- •Лекция №9 Тема: Коллекции. Сравнение массивов и коллекций.
- •По общим характеристикам
- •По логике организации
- •Использование простую коллекцию
- •Типы коллекций
- •Классы System.Collections.Concurrent
- •Классы System.Collections
- •Реализация коллекцию клавиши " ключ-значение "
- •Использование linq для доступа к коллекции
- •Сортировка коллекция
- •Указание пользовательскую коллекцию
Использование простую коллекцию
В примерах этого раздела используется универсальный шаблон класс List<T>, который позволяет работать с строго типизированный список объектов.
В следующем примере создается список строк, а затем просматриваются строки с помощью выписки For each… next (Visual Basic) или foreach (c#).
var salmons = new List<string>();
salmons.Add("chinook");
salmons.Add("coho");
salmons.Add("pink");
salmons.Add("sockeye");
foreach (var salmon in salmons)
{
Console.Write(salmon + " ");
}
Если содержимое коллекции известны заранее, можно использовать инициализатор набора для инициализации коллекции. Дополнительные сведения см. в разделе Инициализаторы коллекций (Visual Basic) или Инициализаторы объектов и коллекций (Руководство по программированию в C#).
Следующий пример такой же, как и предыдущий, за исключением того, что инициализатор набора используется для добавления элементов в коллекцию.
var salmons = new List<string> { "chinook", "coho", "pink", "sockeye" };
// Iterate through the list.
foreach (var salmon in salmons)
{
Console.Write(salmon + " ");
}
Можно использовать выписку For… next (Visual Basic) или для (c#) вместо выписки For Each для прохода по коллекции. Это выполняется путем доступа к элементам коллекции по позиции индекса. Индекс начинается с 0 и заканчивается элементов в элементе учитываются минус 1.
Следующий пример выполняет итерацию по элементам коллекции с помощью For…Next вместо For Each.
var salmons = new List<string> { "chinook", "coho", "pink", "sockeye" };
for (var index = 0; index < salmons.Count; index++)
{
Console.Write(salmons[index] + " ");
}
Следующий пример удаляет элемент из коллекции путем указания объекта для удаления.
var salmons = new List<string> { "chinook", "coho", "pink", "sockeye" };
salmons.Remove("coho");
foreach (var salmon in salmons)
{
Console.Write(salmon + " ");
}
Следующий пример удаляет элементы из универсального списка. Вместо выписки For Each, используется оператор For… next (Visual Basic) или для (c#), проходящий по убыванию. Это происходит потому, что метод RemoveAt вызывает элементы после удаленного элемента иметь меньшее значение индекса.
var numbers = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// Remove odd numbers.
for (var index = numbers.Count - 1; index >= 0; index--)
{
if (numbers[index] % 2 == 1)
{
// Remove the element by specifying
// the zero-based index in the list.
numbers.RemoveAt(index);
}
}
// Iterate through the list.
// A lambda expression is placed in the ForEach method
// of the List(T) object.
numbers.ForEach(
number => Console.Write(number + " "));
// Output: 0 2 4 6 8
Для типа элементов в List<T> можно также определить собственный класс. В следующем примере класс Galaxy, который используется List<T> определенный в коде.
private void IterateThroughList()
{
var theGalaxies = new List<Galaxy>
{
new Galaxy() { Name="Tadpole", MegaLightYears=400},
new Galaxy() { Name="Pinwheel", MegaLightYears=25},
new Galaxy() { Name="Milky Way", MegaLightYears=0},
new Galaxy() { Name="Andromeda", MegaLightYears=3}
};
foreach (Galaxy theGalaxy in theGalaxies)
{
Console.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears);
}
}
public class Galaxy
{
public string Name { get; set; }
public int MegaLightYears { get; set; }
}