Как использовать библиотеку list в с
Перейти к содержимому

Как использовать библиотеку list в с

  • автор:

Как использовать библиотеку list в с

Итак, класс ArrayList представляет коллекцию объектов. И если надо сохранить вместе разнотипные объекты — строки, числа и т.д., то данный класс как раз для этого подходит.

Основные методы класса:

  • int Add(object value) : добавляет в список объект value
  • void AddRange(ICollection col) : добавляет в список объекты коллекции col, которая представляет интерфейс ICollection — интерфейс, реализуемый коллекциями.
  • void Clear() : удаляет из списка все элементы
  • bool Contains(object value) : проверяет, содержится ли в списке объект value. Если содержится, возвращает true, иначе возвращает false
  • void CopyTo(Array array) : копирует текущий список в массив array.
  • ArrayList GetRange(int index, int count) : возвращает новый список ArrayList, который содержит count элементов текущего списка, начиная с индекса index
  • int IndexOf(object value) : возвращает индекс элемента value
  • void Insert(int index, object value) : вставляет в список по индексу index объект value
  • void InsertRange(int index, ICollection col) : вставляет в список начиная с индекса index коллекцию ICollection
  • int LastIndexOf(object value) : возвращает индекс последнего вхождения в списке объекта value
  • void Remove(object value) : удаляет из списка объект value
  • void RemoveAt(int index) : удаляет из списка элемент по индексу index
  • void RemoveRange(int index, int count) : удаляет из списка count элементов, начиная с индекса index
  • void Reverse() : переворачивает список
  • void SetRange(int index, ICollection col) : копирует в список элементы коллекции col, начиная с индекса index
  • void Sort() : сортирует коллекцию

Кроме того, с помощью свойства Count можно получить количество элементов в списке.

Посмотрим применение класса на примере.

using System; using System.Collections; namespace Collections < class Program < static void Main(string[] args) < ArrayList list = new ArrayList(); list.Add(2.3); // заносим в список объект типа double list.Add(55); // заносим в список объект типа int list.AddRange(new string[] < "Hello", "world" >); // заносим в список строковый массив // перебор значений foreach (object o in list) < Console.WriteLine(o); >// удаляем первый элемент list.RemoveAt(0); // переворачиваем список list.Reverse(); // получение элемента по индексу Console.WriteLine(list[0]); // перебор значений for (int i = 0; i < list.Count; i++) < Console.WriteLine(list[i]); >Console.ReadLine(); > > >

Во-первых, так как класс ArrayList находится в пространстве имен System.Collections, то подключаем его ( using System.Collections; ).

Вначале создаем объект коллекции через конструктор как объект любого другого класса: ArrayList list = new ArrayList(); . При необходимости мы могли бы так же, как и с массивами, выполнить начальную инициализацию коллекции, например, ArrayList list = new ArrayList();

Далее последовательно добавляем разные значения. Данный класс коллекции, как и большинство других коллекций, имеет два способа добавления: одиночного объекта через метод Add и набора объектов, например, массива или другой коллекции через метод AddRange

Через цикл foreach мы можем пройтись по всем объектам списка. И поскольку данная коллекция хранит разнородные объекты, а не только числа или строки, то в качестве типа перебираемых объектов выбран тип object: foreach (object o in list)

Многие коллекции, в том числе и ArrayList, реализуют удаление с помощью методов Remove/RemoveAt. В данном случае мы удаляем первый элемент, передавая в метод RemoveAt индекс удаляемого элемента.

В завершении мы опять же выводим элементы коллекции на экран только уже через цикл for. В данном случае с перебором коллекций дело обстоит также, как и с массивами. А число элементов коллекции мы можем получить через свойство Count

С помощью индексатора мы можем получить по индексу элемент коллекции так же, как и в массивах: object firstObj = list[0];

Что такое List в C#?

Динамические массивы или коллекции — хороши тем, что нам не надо указывать сколько в них будет элементов. Кроме того, мы можем с легкостью удалять элементы, добавлять новые и выполнять полное удаление всех элементов. Программам обычно необходимо выделять больше памяти на такие массивы.

Списки (List) в языке C# представляют собой динамически расширяемые коллекции, спроектированные для хранения и управления набором элементов. Они предоставляют удобные методы для добавления, удаления и доступа к элементам коллекции.

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

using System.Collections.Generic;

После этого мы можем их использовать. Изначально такие массивы создаются без каких-либо элементов в них, так как потом их можно добавить при помощи метода Add .

List words = new List (); words.Add ("Простые слова,"); words.Add ("но они являются"); words.Add ("элементами массива"); // Вывод элементов списка foreach (int item in myList) Console.WriteLine(item);

Как использовать LINQ для заполнения List

Здравствуйте!
Подскажите пожалуйста, как переписать функцию GetValues() с помощью LINQ.
И если дадите дельную ссылку на изучение LINQ(кроме MSDN), буду благодарен. Вот код:

enum MyEnum < FIRST, SECOND >; class MyClass < ListMyList = new List(); //constructor internal MyClass() < MyList.Add(new MyObject(MyEnum.FIRST, 1)); MyList.Add(new MyObject(MyEnum.FIRST, 2)); MyList.Add(new MyObject(MyEnum.FIRST, 3)); MyList.Add(new MyObject(MyEnum.SECOND, 1)); ListcollectedValues = GetValues(MyList, MyEnum.SECOND); > List GetValues(List MyList, MyEnum ExceptionEnum) < ListreturnList = new List(); for(int i = 0; i < MyList.Count; i++) < if(MyList[i].MyName == ExceptionEnum) continue; returnList.Add(MyList[i].Value); >return returnList; > > class MyObject < internal MyEnum MyName; internal int Value; public MyObject(MyEnum MyName, int Value) < this.MyName = MyName; this.Value = Value; >> 

Отслеживать
задан 5 мая 2017 в 13:37
339 2 2 серебряных знака 10 10 бронзовых знаков
Вряд ли найдется что-то лучше чем MSDN
5 мая 2017 в 13:57
5 мая 2017 в 14:06

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

List GetValues(List MyList, MyEnum ExceptionEnum) < return MyList.Where(i =>i.MyName != ExceptionEnum).Select(i => i.Value).ToList(); > 
if(MyList[i].MyName == ExceptionEnum) continue; returnList.Add(MyList[i].Value); 
if(MyList[i].MyName != ExceptionEnum) returnList.Add(MyList[i].Value); 

И отсюда следует, что нам надо взять все элементы из MyList , где MyListItem.MyName != ExceptionEnum . Тут нам приходит на помощь Where-clause . Далее проходим и вытягиваем Value из каждого элемента с помощью Select-clause . И в конце просто конвертим IEnumerable в List с помощью ToList() .

Насчет изучения LINQ, то посоветую сайт товарища Метанита.

Коллекции

Хотя в языке C# есть массивы, которые хранят в себе наборы однотипных объектов, но работать с ними не всегда удобно. Например, массив хранит фиксированное количество объектов, однако что если мы заранее не знаем, сколько нам потребуется объектов. И в этом случае намного удобнее применять коллекции. Еще один плюс коллекций состоит в том, что некоторые из них реализует стандартные структуры данных, например, стек, очередь, словарь, которые могут пригодиться для решения различных специальных задач. Большая часть классов коллекций содержится в пространстве имен System.Collections.Generic .

Класс List из пространства имен System.Collections.Generic представляет простейший список однотипных объектов. Класс List типизируется типом, объекты которого будут хранится в списке.

Мы можем создать пустой список:

List people = new List();

В данном случае объект List типизируется типом string . А это значит, что хранить в этом списке мы можем только строки.

Можно сразу при создании списка инициализировать его начальными значениями. В этом случае элементы списка помещаются после вызова конструктора в фигурных скобках

List people = new List() < "Tom", "Bob", "Sam" >;

В данном случае в список помещаются три строки

Также можно при создании списка инициализировать его элементами из другой коллекции, например, другого списка:

var people = new List() < "Tom", "Bob", "Sam" >; var employees = new List(people);

Можно совместить оба способа:

var people = new List() < "Tom", "Bob", "Sam" >; var employees = new List(people);

В данном случае в списке employees будет четыре элемента ( < "Tom", "Bob", "Sam", "Mike" >) — три добавляются из списка people и один элемент задается при инициализации.

Начиная с версии C# 12 для определения списков можно использовать выражения коллекций, которые предполагают заключение элементов коллекции в квадратные скобки:

List people = ["Tom", "Bob", "Sam"]; List employees = [];// пустой список

Подобным образом можно работать со списками других типов, например:

List people = new List() < new Person("Tom"), new Person("Bob"), new Person("Sam") >; class Person < public string Name < get;>public Person(string name) => Name = name; >

Установка начальной емкости списка

Еще один конструктор класса List принимает в качестве параметра начальную емкость списка:

List people = new List(16);

Указание начальной емкости списка позволяет в будущем увеличить производительность и уменьшить издержки на выделение памяти при добавлении элементов. Поскольку динамическое добавление в список может приводить на низком уровне к дополнительному выделению памяти, что снижает производительность. Если же мы знаем, что список не будет превышать некоторый размер, то мы можем передать этот размер в качестве емкости списка и избежать дополнительных выделений памяти.

Также начальную емкость можно установить с помощью свойства Capacity , которое имеется у класса List.

Обращение к элементам списка

Как и массивы, списки поддерживают индексы, с помощью которых можно обратиться к определенным элементам:

var people = new List() < "Tom", "Bob", "Sam" >; string firstPerson = people[0]; // получаем первый элемент Console.WriteLine(firstPerson); // Tom people[0] = "Mike"; // изменяем первый элемент Console.WriteLine(people[0]); // Mike

Длина списка

С помощью свойства Count можно получить длину списка:

var people = new List() < "Tom", "Bob", "Sam" >; Console.WriteLine(people.Count); // 3

Перебор списка

C# позволяет осуществить перебор списка с помощью стандартного цикла foreach :/p>

var people = new List() < "Tom", "Bob", "Sam" >; foreach (var person in people) < Console.WriteLine(person); >// Вывод программы: // Tom // Bob // Sam

Также можно использовать другие типы циклов и в комбинации с индексами перебирать списки:

var people = new List() < "Tom", "Bob", "Sam" >; for (int i = 0; i

Методы списка

Среди его методов можно выделить следующие:

  • void Add(T item) : добавление нового элемента в список
  • void AddRange(IEnumerable collection) : добавление в список коллекции или массива
  • int BinarySearch(T item) : бинарный поиск элемента в списке. Если элемент найден, то метод возвращает индекс этого элемента в коллекции. При этом список должен быть отсортирован.
  • void CopyTo(T[] array) : копирует список в массив array
  • void CopyTo(int index, T[] array, int arrayIndex, int count) : копирует из списка начиная с индекса index элементы, количество которых равно count, и вставляет их в массив array начиная с индекса arrayIndex
  • bool Contains(T item) : возвращает true , если элемент item есть в списке
  • void Clear() : удаляет из списка все элементы
  • bool Exists(Predicate match) : возвращает true , если в списке есть элемент, который соответствует делегату match
  • T? Find(Predicate match) : возвращает первый элемент, который соответствует делегату match. Если элемент не найден, возвращается null
  • T? FindLast(Predicate match) : возвращает последний элемент, который соответствует делегату match. Если элемент не найден, возвращается null
  • List FindAll(Predicate match) : возвращает список элементов, которые соответствуют делегату match
  • int IndexOf(T item) : возвращает индекс первого вхождения элемента в списке
  • int LastIndexOf(T item) : возвращает индекс последнего вхождения элемента в списке
  • List GetRange(int index, int count) : возвращает список элементов, количество которых равно count, начиная с индекса index.
  • void Insert(int index, T item) : вставляет элемент item в список по индексу index. Если такого индекса в списке нет, то генерируется исключение
  • void InsertRange(int index, collection) : вставляет коллекцию элементов collection в текущий список начиная с индекса index. Если такого индекса в списке нет, то генерируется исключение
  • bool Remove(T item) : удаляет элемент item из списка, и если удаление прошло успешно, то возвращает true. Если в списке несколько одинаковых элементов, то удаляется только первый из них
  • void RemoveAt(int index) : удаление элемента по указанному индексу index. Если такого индекса в списке нет, то генерируется исключение
  • void RemoveRange(int index, int count) : параметр index задает индекс, с которого надо удалить элементы, а параметр count задает количество удаляемых элементов.
  • int RemoveAll((Predicate match)) : удаляет все элементы, которые соответствуют делегату match. Возвращает количество удаленных элементов
  • void Reverse() : изменяет порядок элементов
  • void Reverse(int index, int count) : изменяет порядок на обратный для элементов, количество которых равно count, начиная с индекса index
  • void Sort() : сортировка списка
  • void Sort(IComparer? comparer) : сортировка списка с помощью объекта comparer, который передается в качестве параметра

Добавление в список

List people = new List () < "Tom" >; people.Add("Bob"); // добавление элемента // people = < "Tom", "Bob" >; people.AddRange(new[] < "Sam", "Alice" >); // добавляем массив // people = < "Tom", "Bob", "Sam", "Alice" >; // также можно было бы добавить другой список // people.AddRange(new List()< "Sam", "Alice" >); people.Insert(0, "Eugene"); // вставляем на первое место // people = < "Eugene", "Tom", "Bob", "Sam", "Alice" >; people.InsertRange(1, new string[] ); // вставляем массив с индекса 1 // people = < "Eugene", "Mike", "Kate", "Tom", "Bob", "Sam", "Alice" >; // также можно было бы добавить другой список // people.InsertRange(1, new List()< "Mike", "Kate" >);

Удаление из списка

var people = new List () < "Eugene", "Mike", "Kate", "Tom", "Bob", "Sam", "Tom", "Alice" >; people.RemoveAt(1); // удаляем второй элемент // people = < "Eugene", "Kate", "Tom", "Bob", "Sam", "Tom", "Alice" >; people.Remove("Tom"); // удаляем элемент "Tom" // people = < "Eugene", "Kate", "Bob", "Sam", "Tom", "Alice" >; // удаляем из списка все элементы, длина строки которых равна 3 people.RemoveAll(person => person.Length == 3); // people = < "Eugene", "Kate", "Alice" >; // удаляем из списка 2 элемента начиная с индекса 1 people.RemoveRange(1, 2); // people = < "Eugene">; // полностью очищаем список people.Clear(); // people = < >;

Поиск и проверка элемента

var people = new List () < "Eugene", "Mike", "Kate", "Tom", "Bob", "Sam" >; var containsBob = people.Contains(«Bob»); // true var containsBill = people.Contains(«Bill»); // false // проверяем, есть ли в списке строки с длиной 3 символа var existsLength3 = people.Exists(p => p.Length == 3); // true // проверяем, есть ли в списке строки с длиной 7 символов var existsLength7 = people.Exists(p => p.Length == 7); // false // получаем первый элемент с длиной в 3 символа var firstWithLength3 = people.Find(p => p.Length == 3); // Tom // получаем последний элемент с длиной в 3 символа var lastWithLength3 = people.FindLast(p => p.Length == 3); // Sam // получаем все элементы с длиной в 3 символа в виде списка List peopleWithLength3 = people.FindAll(p => p.Length == 3); // peopleWithLength3

Получение диапазона и копирование в массив

List people = new List() ; // получаем диапазон со второго по четвертый элемент var range = people.GetRange(1, 3); // range = < "Tom", "Mike", "Sam">; // копируем в массив первые три элемента string[] partOfPeople = new string[3]; people.CopyTo(0, partOfPeople, 0, 3); // partOfPeople = < "Eugene", "Tom", "Mike">;

Расположение элементов в обратном порядке

var people = new List () < "Eugene", "Tom", "Mike", "Sam", "Bob" >; // переворачиваем весь список people.Reverse(); // people = < "Bob","Sam", "Mike", "Tom", "Eugene">; var people2 = new List() < "Eugene", "Tom", "Mike", "Sam", "Bob" >; // переворачиваем часть только 3 элемента с индекса 1 people2.Reverse(1, 3); // people2 = < "Eugene","Sam", "Mike", "Tom", "Bob" >;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *