Иди на текст

Листе

Претходне школске године радио си са листама у програмском језику C, где није постојао уграђени тип листе - листе си морао да имплементираш ручно коришћењем структура и показивача. Најчешћи тип листе којег си користио била је повезана листа (енгл. linked list), која се састоји од низа чворова где сваки чвор садржи податке и указивач на следећи чвор.

У програмском језику C# листа представља јако типизирану листу објеката којима се може приступити путем индекса. Дефинисана је у класи List<T> у именском простору System.Collections.Generic, заједно са другим генеричким колекцијама о којима ћеш учити у IV разреду.

Класа List<T> пружа бројне функционалности за рад са динамичким низовима, као што су: приступ елементима, додавање нових елемената, брисање елемената, претрага елемената и сортирање елемената. Она може да чува елементе било ког типа, што омогућава већу флексибилност и сигурност при раду са различитим типовима података. За разлику од статички алоцираних низова чија је величина фиксна, листа аутоматски прилагођава своју величину када се у њу додају или из ње уклањају елементи.

Нека је задатак да креираш листу ucenici и у њу иницијално додаш три ученика чија су имена Paja, Raja и Gaja:

List<string> ucenici = new List<string>() { "Paja", "Raja", "Gaja" };

У листу можеш накнадно да додајеш ученике методом Add():

ucenici.Add("Vlaja");
ucenici.Add("Zlaja");
ucenici.Add("Maja");

У конзоли, најједноставније, можеш да испишеш све ученике са листе помоћу наредбе циклуса за колекције:

foreach (string ucenik in ucenici)
    Console.WriteLine(ucenik);

Методом Reverse() можеш да обрнеш редослед ученика у листи...

ucenici.Reverse();

...а у параметрима методе Reverse() можеш да дефинишеш, на пример, обртање редоследа од ученика са индексом 0, три ученика:

ucenici.Reverse(0, 3);

Методом Insert(); можеш да убациш новог ученика на листу, на пример, на треће место на листи (индекс 2) убаци ученика чије је име Pera:

ucenici.Insert(2, "Pera");

Методом Sort() једноставно се сортирају сви ученици на листи...

ucenici.Sort();

...а претрага се може вршити методом Contains(). На пример, да ли се на листи налази ученик чије је име Raja:

if(ucenici.Contains("Raja"))
    Console.WriteLine("Nalazi se.");
else
    Console.WriteLine("Ne nalazi se.");

Подлисту можеш да креираш методом GetRange(), на пример, подлисту prvaGrupa у којој се налазе прва три ученика на листи:

List<string> prvaGrupa = ucenici.GetRange(0, 3);

Елементе листе можеш да копираш у низ, на пример елементе листе ucenici у низ nizUcenika:

string[] nizUcenika = ucenici.ToArray();

На крају, све ученике можеш да обришеш са листе методом Clear():

ucenici.Clear();

Ако се говори о сличностима и разликама између рада са листама у програмским језицима C# и C, сигурно је прво запажање лакоћа коришћења листи у језику C# захваљујући обезбеђеној "подршци" у класи List<T>. Поред тога, у језику C# управљање меморијом је аутоматизовано захваљујући сакупљачу смећа (енгл. garbage collector), док у језику C корисник мора ручно да управља меморијом. Сличности су да листе у језицима C# и C омогућавају динамичко управљање низовима података и да могу да се користе за имплементацију различитих алгоритама и структура података.