πŸ‘¨β€πŸŽ“οΈ Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ C#: Ρ€Π°Π±ΠΎΡ‚Π° с классом List

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списком List: созданиС списка ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ; Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, поиск ΠΈ сортировка элСмСнтов.

Бписок List<T>

List<T> β€” класс ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ System.Collections.Generic, список ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ массива, прСдоставляСт Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов (это ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° нСизвСстно Π·Π°Ρ€Π°Π½Π΅Π΅ сколько Π±ΡƒΠ΄Π΅Ρ‚ элСмСнтов).

Π•ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² создания списка:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ списка Π±Π΅Π· Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

//List<T> list = new List<T>(); //T - Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ int
//ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
List<int> list = new List<int>();
//ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²:
List<string> sList = new List<string>();
List<object> oList = new List<object>();

НСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² список.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ списка с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями

//List<T> list = new List<T>(){ Item1, Item2, Item3… }; //Item1/2/3 - элСмСнты нашСго списка, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… T
//List<T> list = new List<T>{ Item1, Item2, Item3… }; // Π’ΠΎΠΆΠ΅ допустимо
//ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
List<int> list = new List<int> { 1, 2, 3 }; //ΠœΡ‹ создали список с Π½Π°Π±ΠΎΡ€ΠΎΠΌ чисСл

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ списка

List<int> list = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int>(list); 

Надо Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ list2 = list, Ρ‚. ΠΊ. ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ списка Π² конструктор Π½ΠΎΠ²ΠΎΠ³ΠΎ списка создаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ список, Ρ‚. Π΅. Π² памяти выдСляСтся мСсто для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ заполняСтся Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌ спискС.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π°Β»

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

List<int> list = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int>(list) { 4 };

Если вывСсти всС значСния ΠΈΠ· списка list2, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ значСния ΠΎΡ‚ 1 Π΄ΠΎ 4.

Π’Π°ΠΊΠΆΠ΅ рассмотрим Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классом.

class Cup
{
    public string Name { get; set; }
    public int Capacity { get; set; }
    public ConsoleColor Color { get; set; }
    public Cup(string name)
    {
        Name = name;
    }
}
List<Cup> cups = new List<Cup>
{
		new Cup("Моя ΠΊΡ€ΡƒΠΆΠΊΠ°") {
				Color = ConsoleColor.White,
				Capacity = 1000
		},
		new Cup("НС моя ΠΊΡ€ΡƒΠΆΠΊΠ°") {
				Color = ConsoleColor.Black,
				Capacity = 300
		}
};

Установка Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Смкости списка

Помимо пСрСчислСнных Π²Ρ‹ΡˆΠ΅ конструкторов, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Смкости списка:

List<int> list = new List<int>(10);

Π’Π½ΡƒΡ‚Ρ€ΠΈ списка находится массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Смкости динамичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов. На Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ провСряСтся, Ссли Π² массивС (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ списка) Π½Π΅Ρ‚ элСмСнтов, Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ выставляСтся Ρ€Π°Π²Π½Ρ‹ΠΌ _defaultCapacity (пСрСмСнная Π² исходниках, которая ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 4), Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС считаСтся ΠΈΠ· «количСство элСмСнтов» * 2. Π’. Π΅. всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ достигаСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, List автоматичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΅Π³ΠΎ Π² 2 Ρ€Π°Π·Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ списка β€” это 2G (Array.MaxArrayLength – 2146435071) элСмСнтов. Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ссли извСстСн ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ списка, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ ΠΎΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΉ памяти.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам списка

Аналогично ΠΊΠ°ΠΊ Π² массивС, допустимо ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ элСмСнтам списка Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках ΠΏΠΎ индСксу.

List<int> list = new List<int>() { 3, 4, 2, 0 };
Console.WriteLine(list[0]);// 3
list[0] = 7;
Console.WriteLine(list[0]);// 7
List<int> list1 = new List<int>();
list1[0] = 1; // ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ArgumentOutOfRangeException, Ρ‚.Π΅. для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ элСмСнт списка
Доступ ΠΊ элСмСнтам списка

Π”Π»ΠΈΠ½Π° списка

Для опрСдСлСния Π΄Π»ΠΈΠ½Ρ‹ списка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ свойство Count.

List<int> list = new List<int>() { 3, 4, 2, 0 };
Console.WriteLine(list.Count); // 4
list = new List<int>();
Console.WriteLine(list.Count); // 0
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ списка

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ списка

Для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° списка ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСский Ρ†ΠΈΠΊΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ for.

List<int> list = new List<int>() { 3, 4, 2, 0 };
for(int i = 0; i < list.Count; i++)
		Console.WriteLine(list[i]);
ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ списка for

Π’Π°ΠΊΠΆΠ΅ сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списками foreach.

List<int> list = new List<int>() { 3, 4, 2, 0 };
foreach(int item in list)
		Console.WriteLine(item);
ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ списка foreach

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ списка

НаконСц, Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ самого интСрСсного β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ со списком ΠΏΠΎ сравнСнии с массивом. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Microsoft):

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² список

  • void Add(T item) β€” добавляСт Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт с Ρ‚ΠΈΠΏΠΎΠΌ T Π² ΠΊΠΎΠ½Π΅Ρ† списка.
  • void AddRange(IEnumerable<T> collection) β€” добавляСт Π² список ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ массив Π² ΠΊΠΎΠ½Π΅Ρ† списка.
  • void Insert(int index, T item) β€” вставляСт элСмСнт Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу. ΠŸΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (0 > index ΠΈΠ»ΠΈ Count-1 < index) Π±ΡƒΠ΄Π΅Ρ‚ сформировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.ArgumentOutOfRangeException.
  • void InsertRange(int index, IEnumerable<T> collection) β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вставляСт список элСмСнтов ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ сформировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.ArgumentOutOfRangeException.

Поиск ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° элСмСнта

  • int BinarySearch(T item) β€” Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск элСмСнта Π² спискС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс элСмСнта. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Ссли список отсортирован. Π˜ΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ сравнСния элСмСнтов ΠΈΠ»ΠΈ указания Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ поиска.
  • bool Contains(T item) β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия элСмСнта Π² спискС.
  • bool Exists(Predicate<T> match) β€” провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² спискС хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ условиям Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° match.
  • T Find(Predicate<T> match) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ условиям Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° match.
  • List<T> FindAll(Predicate<T> match) β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Find, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС элСмСнты.
  • int FindIndex(Predicate<T> match) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс элСмСнта, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ условиям Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° match. Π˜ΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ поиска ΠΈ количСства элСмСнтов.
  • int FindLastIndex(Predicate<T> match) β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ FindIndex, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс послСднСго элСмСнта, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ условиям Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° match. Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ поиска ΠΈ количСства элСмСнтов.
  • List<T> GetRange(int index, int count) β€” этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ подсписок ΠΈΠ· списка ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ индСкса с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ количСством элСмСнтов.
  • int IndexOf(T item) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс элСмСнта, Ссли ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Π½ Π² спискС Π»ΠΈΠ±ΠΎ -1. Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ Π΄Π²Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ поиска ΠΈ количСства элСмСнтов.
  • int LastIndexOf(T item) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСдний индСкс элСмСнта, Ссли ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Π½ Π² спискС Π»ΠΈΠ±ΠΎ -1. Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ Π΄Π²Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ поиска ΠΈ количСства элСмСнтов.

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

  • bool Remove(T item) β€” удаляСт ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· списка. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли элСмСнт Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ»ΠΈ false, Ссли Π½Π΅Ρ‚.
  • int RemoveAll(Predicate<T> match) β€” удаляСт всС элСмСнты, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ условиям Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° match. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов.
  • void RemoveAt(int index) β€” удаляСт элСмСнт списка с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ индСксом. ΠŸΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ индСкса Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ списка Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.ArgumentOutOfRangeException.
  • void RemoveRange(int index, int count) β€” удаляСт элСмСнты массива с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ индСкса Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ количСствС. Если index мСньшС 0 ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° count мСньшС 0, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сформировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.ArgumentOutOfRangeException. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ index ΠΈ count Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ допустимый Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ элСмСнтов Π² спискС, Π±ΡƒΠ΄Π΅Ρ‚ сформировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.ArgumentException.
  • void Clear() β€” удаляСт всС элСмСнты ΠΈΠ· списка.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка

  • void Sort() β€” сортируСт элСмСнты. Π’ основС Π»Π΅ΠΆΠΈΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ быстрой сортировки с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ рСкурсии Π΄ΠΎ 32, ΠΏΡ€ΠΈ достиТСнии ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сортировка ΠΊΡƒΡ‡Π΅ΠΉ.
  • void Reverse() β€” измСняСт порядок элСмСнтов Π²ΠΎ всСм спискС Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ. Π˜ΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ указываСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΈ количСство элСмСнтов.

ΠŸΡ€ΠΎΡ‡Π΅Π΅

  • List<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> converter) β€” позволяСт ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ‚ΠΈΠΏΡ‹ элСмСнтов Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ списка Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ. На Π²Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π΅Π»Π΅Π³Π°Ρ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.
  • void CopyTo(T[] array) β€” ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ список Π² массив. Π˜ΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ† ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ копирования.
  • void ForEach(Action<T> action) β€” это Π°Π½Π°Π»ΠΎΠ³ Ρ†ΠΈΠΊΠ»Π° foreach, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ элСмСнт с Ρ‚ΠΈΠΏΠΎΠΌ T. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΎΡ‚ foreach состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π½Π΅ сработаСт Π½ΠΈ break, Π½ΠΈ continue. Аналогом continue ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ return.
  • T[] ToArray() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив элСмСнтов списка.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² список

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создадим массив ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅.

List<int> list = new List<int>();
for (int i = 0; i < 10; i++)
{
    list.Add(i); // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† списка
    list.AddRange(new[] { i + 4, i + 5 }); // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† списка
    list.Insert(i, i + 1); // Вставка элСмСнта ΠΏΠΎ индСксу i
    list.InsertRange(i, new[] { i + 2, i + 3 }); // Вставка массива/ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎ индСксу i
}

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

List<int> list = new List<int>() { 0, 1, 2, 9, 32, -7 }; // Π‘ΠΎΠ·Π΄Π°Π»ΠΈ массив с элСмСнтами
Console.WriteLine(string.Join(",", list));
if (list.Remove(9)) // УдаляСм 9
    Console.WriteLine("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 9 ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΠ΄Π°Π»Π΅Π½.");
Console.WriteLine(string.Join(",", list));
list.RemoveAt(0); // УдаляСм 0
Console.WriteLine(string.Join(",", list));
list.RemoveAll(i => i < 0); // УдаляСм -7
Console.WriteLine(string.Join(",", list));
list.RemoveRange(0, 2); // УдаляСс 1 и 2
Console.WriteLine(string.Join(",", list));
list.Clear(); // УдаляСм всС ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ элСмСнты - 32
Console.WriteLine(string.Join(",", list));
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· списка

Поиск ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° элСмСнта

List<int> list = new List<int> { 0, 0, 1, -7, 9, 2, 32, 16, 42 };

//Π˜Π½Π΄Π΅ΠΊΡΡ‹
//Поиск ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ индСкса
Console.WriteLine(list.FindIndex(i => i % 2 == 0)); // 0

//Поиск послСднСго Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ индСкса
Console.WriteLine(list.FindLastIndex(i => i % 2 == 0)); // 8

//Поиск индСкса ΠΏΠΎ числу ΠΈΠ· списка
Console.WriteLine(list.IndexOf(-7)); // 3

//ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ индСкс числа ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² спискС
Console.WriteLine(list.IndexOf(13)); // -1

//Поиск послСднСго индСкса ΠΏΠΎ числу ΠΈΠ· списка
Console.WriteLine(list.LastIndexOf(0)); // 1

list.Sort(); // ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ массив, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это основноС условиС Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска
Console.WriteLine(list.BinarySearch(9)); // 5

//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вхоТдСния
//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² спискС Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа
Console.WriteLine(list.Exists(i => i % 2 == 0)); // true

Console.WriteLine(list.Contains(0)); // true
Console.WriteLine(list.Contains(13)); // false

//ЗначСния
//А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число
Console.WriteLine(list.Find(i => i % 2 == 0)); // 0

//НайдСм всС Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа
Console.WriteLine(string.Join(",", list.FindAll(i => i % 2 == 0))); // 0,0,2,16,32,42

//ПослСднСС Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число
Console.WriteLine(string.Join(",", list.FindLast(i => i % 2 == 0))); // 42

//ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ подсписок, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 4 элСмСнта
Console.WriteLine(string.Join(",", list.GetRange(0, 4))); // -7,0,0,1

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² массив

List<int> list = new List<int> { 0, 0, 1, -7, 9, 2, 32, 16, 42 }; 

var range = list.GetRange(2, 3); // ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½/подсписок
int[] part = new int[range.Count]; // Объявим массив ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½
range.CopyTo(part); // Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½

Console.WriteLine(string.Join(",", part)); // 1,-7,9
Π Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ

РасполоТСниС элСмСнтов Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС

List<int> list = new List<int> { 0, 0, 1, -7, 9, 2, 32, 16, 42 };

list.Reverse();
Console.WriteLine(string.Join(",", list)); // 42,16,32,2,9,-7,1,0,0

list.Reverse(1, 3);
Console.WriteLine(string.Join(",", list)); // 42,2,32,16,9,-7,1,0,0
ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС
***

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСна Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ List, рассмотрСна базовая Ρ€Π°Π±ΠΎΡ‚Π° (инициализация, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списком:

  1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅.
  2. Поиск.
  3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅.
  4. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°.
  5. Π Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

matyushkin
18 ΠΌΠ°Ρ€Ρ‚Π° 2020

ВОП-10 ΠΊΠ½ΠΈΠ³ ΠΏΠΎ C#: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

ΠžΡ‚ΠΎΠ±Ρ€Π°Π»ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ C#, .NET, Unity c Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ ΠΎΡ†Π΅Π½ΠΊΠ°ΠΌΠΈ. РасполоТил...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
25 августа 2019

ΠŸΠΎΡ‡Π΅ΠΌΡƒ C# программисты скоро Π±ΡƒΠ΄ΡƒΡ‚ нарасхват

C# программисты становятся Π±ΠΎΠ»Π΅Π΅ вострСбованными благодаря Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ эк...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
12 ΠΌΠ°Ρ€Ρ‚Π° 2018

ВидСокурс ΠΏΠΎ C# с нуля: ΠΎΡ‚ основ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ видСокурс для ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… C# с нуля. ΠŸΡ€ΠΎΠΉΠ΄Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ основ Π΄ΠΎ напис...