Листове за 15 минути C#

Линк към видео за масиви -    • Масиви за 15 минути C#   Примитивни типове данни -    • Примитивни типове данни за 15 минути C#   Много е важно да се отбележи преди да започнем, че трябва да гледате видеото, което е за масиви, за да се разберат листовете добре. Линк оставям в описанието долу. Ако вече сте изгледали видеото ми за масиви - да започваме с листовете. Работата при тях е там, че ако масивите трябва да им кажем колко клетки "вагони" ни трябват, за да можем да създадем масив и не можем след това да го променяме - например да добавим нови елементи, то при листовете нещата седят по друг начин. За да работим с листове трябва да добавим следния ред най-горе в IDE-то ни: using System.Collections.Generic; след което можем д създадем един лист по следния начин: List<int> numbers = new List<int>(); Тук вместо да използваме типа и след това квадратни скоби за изразяване на това, че искаме променлива от тип инт масив (int []), тук използваме List<int> което значи List от тип int. В тези скоби могаат да седят различни типове - стрингове, дати, реални числа и т.н. Най-важното е, че листовете могат да се оразмеряват или "рисайзват". До сега имаме лист, който е празен. По познатия ни вече начин, можем да изпечатаме листа Console.WriteLine(string.Join(" ", numbers)); И когато стартираме на конзолата ще се появи празен ред. Можем ръчно да сложим няколко елемента в листа: List<int> numbers = new List<int>() { 1, 2, 56}; Както и при масивите тук работим с индексация - ако искаме третия елемент от листа да се изпринти на конзолата (56) ще го извикаме по индекс (2): Console.WriteLine(numbers[2]); Обхождането на лист, както и при масива може ад стане с for или foreach, зависи дали искаме да модифицираме елементите. При foreach не можем: List<int> numbers = new List<int>() { 1, 2, 56}; for (int i = 0; i < numbers.Count; i++) { Console.WriteLine(numbers[i]); } Където тук за да получим бройката елементи (дължината) използваме .Count, а не .Length, както при масивите. Обхождането с foreach се случва по сходен с масивите начин: List<int> numbers = new List<int>() { 1, 2, 56}; foreach (int number in numbers) { Console.WriteLine(number); } И в двата случая отговорът на конзолата е: 1 2 56 Press any key to continue . . . Как можем да променяме елементите с 10? List<int> numbers = new List<int>() { 1, 2, 56}; for (int i = 0; i < numbers.Count; i++) { numbers[i] += 10; } Console.WriteLine(string.Join(" ", numbers)); Конзолата: 11 12 66 Press any key to continue . . . Нека сега да видим как този лист се самооразмерява. Ако имам 3 елемента в листа и вляза в debug mode в row view, capacity ще видя, че пише 4. Бройката на елементи е 3. Откъде идва 4? Акосъзддем лист с по-малко от 4 елемента, капацитетът му е до 4, но ако сложа в листа 5 елемента: List<int> numbers = new List<int>() { 1, 2, 56, 20, 30}; Ще забележа, че ако отново стартирам дебъг капацитетът вече ще е 8. Ако сложа 9 елемента ще стане 16, ако превиша 16 елемента ще стане 32 и винаги ще се умножова *2. Това не изглежда много в момента, но ако имам 256 елемента и добавя още един капацитетът ще се самоуразмери до 512, което е голяма разлика, пък да не говорим за повече. Драстичната разлика с масивите е, че ако ми трябва масив с 257 елемента, ще заделя точно толкова, ако имам лист с 257 елемента той ще е с капацитет 512. Кое пести повеч памет? Нека да кажем така - искаме лист с n елементи, които четем от конзолата: List<int> numbers = new List<int>(); int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { numbers.Add(int.Parse(Console.ReadLine())); } Console.WriteLine(string.Join(" ", numbers)); Виждаме, че сме успяли да го напълним точно с n числа като тук цикълът служи да отброи бройката числа до n. Ако искаме да махнем елемент на точно ОПРЕДЕЛЕН ИНДЕКС: List<int> numbers = new List<int>() { 10, 50, 30}; numbers.RemoveAt(1); Console.WriteLine(string.Join(" ", numbers)); Конзола: 10 30 Press any key to continue . . . за да изчистин листа - numbers.Clear(); Да махнем точно определено число - numbers.Remove(50); Да сортираме листа от най-малко към най-голямо число- numbers.Sort(); от най-голямо към най-малко: List<int> numbers = new List<int>() { 10, 50, 30}; numbers.Sort(); numbers.Reverse();

Смотрите также