• Apgrejdovali smo forum na XenForo 2.1.1, ukoliko imate predloga vezanih za izgled ili funkcionalnost foruma, ili ukoliko naletite na neki problem, javite nam OVDE

    DEFINISALI SMO PRAVILA FORUMA. Pročitajte ih, pojaviće se automatski kada krenete da čitate nešto!

XNA Programiranje Igara | Tutorijal #07.02 | Liste

Uni

PCAXE Addicted
Učlanjen(a)
31.08.2018.
Poruka
2.469
Rezultat reagovanja
984
Moja konfiguracija
PC / Laptop Name:
Lenovo ThinkPad X250 - i5 5300U/8GB/256GB EVO 860/6 Cell
Mice & keyboard:
Bloody V7M & Stock Thinkpad X250 Keyboard
OS & Browser:
Windows 10 + Microsoft Edge | ArcoLinux + i3 + Mozilla Firefox Quantum
Pre svega, kao i uvek, apelujem na vas da, ukoliko ste propustili iti jedan tutorijal iz serije ovih, iščitate dotične, pošto se svi nadovezuju jedni na druge. Ovo možete učiniti unosom "#xna-gwid" bez navodnika u polje foruma "Pretraga...". :)

Šta ćemo danas obraditi?
U prošlom tutorijalu sam objasnio način funkcionisanja nizova. Iako nizovi mogu da skladište različite promenljive, ne možemo efikasno umetati ili izbacivati elemente niza, već možemo samo kreirati niz sa velikim brojem null elemenata čije ćemo vrednosti menjati. Da bi se ovi problemi rešili, uvodimo dinamičke kolekcije, tj. liste.

Liste
Lista u C#-u je objekat koji skladištu promenljive u određenom poretku. Tip koji lista skladišti, definisan je generičkom sintaksom, kao što je sledeći primer :
List<string> voće = new List<string>();
Kao što možete primetiti, prvo naglašavamo da je reč o listi. Sledeće što zadajemo je tip podataka između znakova manje od i veće od. Ovo je ispraćeno navođenjem naziva liste, a zatim se poziva instanca klase List.

Umetanje elemenata
Kada je izvršena inicijalizacija liste, možemo početi umetanje elemenata liste. Ovo se vrši metodom Add. Pozivanje ove metode vrši se imenovanjem liste u koju umećemo elemente, a ispraćeno je metodom Add i običnim zagradama unutar kojih se nalazi element dodavanja. Razmotrimo sledeći primer :
voće.Add("Kruška");
voće.Add("Šljiva");
voće.Add("Papaja");
Sada naša lista ima tri elementa, tačnije reči "Kruška", "Šljiva" i "Papaja", čiji su redni brojevi 0, 1 i 2. Za razliku od niza, ovde možemo umetati koliko god elemenata poželimo. Zbog ovih karakteristika, ovo je kolekcija dinamičke veličine, tj. dinamička.

Ukljanjanje Elemenata po Nazivu
Isto kao što možemo dodati elemente u listu, možemo ih i izbaciti iz liste. Ovo se vrši korišćenjem metode Remove. Način korišćenja je identičan kao sa Add metodom.
voće.Remove("Kruška");
voće.Remove("Šljiva");
U ovom primeru, preostao je samo jedan element u našoj listi, tačnije "Papaja". Budući da je metoda dinamička, elementi mogu menjati svoje pozicije u memoriji pa je sada redni broj elementa "Papaja" 0, umesto 2.

Ukljanjanje Elemenata po Indeksu
Pozivanje elemenata se obalja na sličan način kao sa nizovima, korišćenjem indeksa. Jedina razlika koja je prisutna jeste da umesto uglastih zagrada, pri navođenju indeksa koristimo obične. Slično je i uklanjanje pozvanih vrednosti, korišćenjem metode RemoveAt.
voće.RemoveAt(1);
voće.RemoveAt(2);
U ovom primeru, preostao je samo jedan element u našoj listi, tačnije "Papaja". Budući da je metoda dinamička, elementi mogu menjati svoje pozicije u memoriji pa je sada redni broj elementa "Papaja" 0, umesto 2, kao u prethodnom primeru.

Spajanje Lista i Dodavanje Više Elemenata Istovremeno
Još jedna pozitivna osobina listi u odnosu na nizove jeste sposobnost spajanja više lista u jednu. Ovo se obavlja korišćenjem metode AddRange. Da bi ovo funkcionisalo, potrebno je naravno imati bar dve liste, inicijalizovane. Razmotrimo sledeći primer :
List<string> voćeJedinoPravo = new List<string>();
voćeJedinoPravo.Add("Kruška");
voćeJedinoPravo.Add("Šljiva");
voćeJedinoPravo.Add("Jabuka");

List<string> voćeTuđe = new List<string>();
voćeTuđe.Add("Banana");
voćeTuđe.Add("Kokos");
voćeTuđe.Add("Kivi");

List<string> voće = new List<string>();
voće.AddRange(voćeJedinoPravo);
voće.AddRange(voćeTuđe);
U ovom primeru, kreiramo dve liste, obe sa po tri elementa. Metodom AddRange, trećoj listi dodajemo vrednosti prethodne dve u zasebnim linijama koda. Sada lista voće ima šest promenljivih čije su vrednosti redom : "Kruška", "Šljiva", "Jabuka", "Banana", "Kokos" i "Kivi", sa indeksnim vrednostima od 0 do 5.

Ako želimo da dodamo više elemenata istovremeno, prvo ćemo kreirati niz elemenata čije vrednosti želimo da dodelimo, a zatim koristiti metodu AddRange, kao što je prikazano ispod.
List<string> voćeJedinoPravo = new List<string>();
string[] elementi = new string[] {"Kruška", "Šljiva", "Jabuka"};

voćeJedinoPravo.AddRange(elementi);
Liste ili Nizovi?
Mnogi početnici smatraju da su liste daleko bolji izbor od nizova i da nizovi jednostavno nemaju namenu. Odgovor na ovo pitanje relativno je jednostavan, pa ako znate koliko će elemenata obuhvatati kolekcija, koristite nizove. Ako ovo nije slučaj, već je broj elemenata kolekcije promenljiv, koriste se liste. Liste pored svojih prednosti doprinose performansama u negativnom smislu, u poređenju sa nizovima, ali operacije nad listama doprinose obratno. Kao što ste mogli videti, listama se pomoću malo kompleksnijih algoritama može dodati više elemenata istovremeno, pa tu primenu nalaze nizovi radi olakšanja.

Šta dalje?
Kao što sam već obećao, narednih nekoliko tutorijala biće tutorijali povezani sa kolekcijama. Nakon ovoga imam u planu uvođenje još samo par pojmova, a očekuje da će nakon polovine tekućeg meseca, početi serijal pravog programiranja igara u XNA framework-u, tako da strpite se :D
Osim toga, iskoristio bih ovu priliku da se zahvalim članu @Zivko koji radi na zbirci rešenih zadataka koji bi ispratili svaki od ovih tutorijala :)
 
Vrh