Utisci korisnika

Hvala Vam na podršci i moram Vam priznati da ste jako ljubazni. Milan Đelić, Valjevo

Pre svega želim da vam se zahvalim na veoma brzom i profesionalnom pristupu. Jovan Knežević - Hong Kong


Kompletna lista utisaka

Testiranje online

Arhitektura računara

Za one koji žele da znaju više.

Windows OS

Ovo bi svakako trebalo da probate.

Odnosi s javnošću

Koliko znate PR?

Pogledajte još neke od testova

Newsletter

Ukoliko želite da Vas redovno obaveštavamo o novostima sa Link eLearning sajta prijavite se na našu newsletter listu.

Ime:

Prezime:

Email:


Anketa

Arhiva anketa

BAZA ZNANJA


Kurs: Core Windows Forms Technologies

Modul: Programiranje u C#

Autor: Marko Stojićević

Naziv jedinice: Kolekcije


Materijali vezani uz ovu lekciju:

- Test kolekcije
- Kolekcije (PDF dokument)



Nizovi

Kolekcije su standardne strukture podataka koje dopunjuju nizove. Nizovi su jedina kolekcija koja je ugrađena u C# jezik. Sve ostale kolekcije su ugrađene u prostor imena System.Collections. Pored jednodimenzionalnih nizova detaljno obrađenih u prošloj lekciji moguće je definisati i dvodimenzionalne i tzv. testeraste nizove. U nastavku je prikazano deklarisanje i instanciranje dvodimenzionalnog niza dimenzija 10 x 10.

string[,] arr1 = new string[10,10];

Članovima niza pristupa se kao arr1[i,j] gde brojevi "i" i "j" pripadaju skupu i,j Є {0,1,..,9}. Kod ovakvog dvodimenzionalnog niza sve vrste matrice imaju istu dužinu. Moguće je definisati i tzv. testeraste dvodimenzionalne nizove gde svaka vrsta matrice ima proizvoljnu dužinu. U nastavku je deklarisan testerasti niz koji će imati dve vrste. Naknadno se definišu vrste testerastog dvodimenzionalnog niza i one mogu biti proizvoljne dužine. Vrste testerastog niza su jednodimenzionalni nizovi. U primeru u nastavku prva vrsta testerastog niza ima dužinu 4 a druga 5.

testerastiNiz [0] = new int[4];
testerastiNiz [1] = new int[5];

  

Klasa Array

Pored standardnog načina konstruisanja nizova u programskom jeziku C# je moguće kreirati nizove upotrebom klase Array. U nastavku je prikazano kreiranje niza koji će čuvati 12 celobrojnih vrednosti kao i način pristupa članovima niza upotrebom klase Array.

Array odredisniNiz=Array.CreateInstance( typeof(int), 12  );
odredisniNiz.SetValue( 100, 0 );
odredisniNiz.SetValue( 200, 1 );
odredisniNiz.SetValue( 300, 2 );
int temp = (int)odredisniNiz.GetValue(1);
Console.WriteLine(temp);

Prvom članu niza dodeljuje se vrednost 100, drugom 200, trećem 300. Za setovanje vrednosti elemenata niza koristi se metoda SetValue a za čitanje vrednosti elemenata niza koristi se metoda GetValue. Klasa Array ima još neke metode koje omogućavaju jednostavnu manipulaciju članovima niza. Metoda Clear() resetuje sve elemente niza. Metoda Reverse postavlja članove niza u obrnutom redosledu. Metoda Sort sortira elemente niza itd.


Prostor imena System.Collections

Prostor imena System.Collections sadrži klase i interfejse koje definišu različite kolekcije objekata. Od klasa treba pomenuti ArrayList, Queue, Stack, Hashtable. Od interfejs tu su ICollection, IEnumerable, IEnumerator, IDictionaryEnumerator, IList itd.

  

Interfejsi

Ovde ćemo reći nešto o osnovnim ulogama pojedinih interfejsa u prostoru imena System. Collections. ICollection  definiše veličinu i enumeratore za sve kolekcije. IComparer  sadrži metode za komparaciju dva objekta. IDictionary  predstavlja kolekciju parova (ključ,vrednost). IDictionaryEnumerator - enumeracija kroz elemente rečnika. IEnumerable sadrži enumerator koji omogućava jednostavnu iteraciju kroz kolekciju. IEnumerator - jednostavna iteracija kroz kolekciju. IList interfejs predstavlja kolekciju objekata kojima se može pristupati preko indeksa.

  

Klasa ArrayList

Elementima liste pristupa se preko indeksa kao i kod niza. Za razliku od niza nije neophodno unapred poznavati broj elemenata niza. Najčešće korišćene metode ove klase su: Metoda Add(object) dodaje objekat na kraj liste. Metoda Clear() briše sve elemente iz liste. Metoda Insert(pozicija, vrednost) ubacuje objekat vrednost na pozicuju pozicija. Metoda  RemoveAt(index) briše elemenat sa indeksom index iz liste. GetEnumerator() metoda vraća iterator koji se koristi za iteraciju(prolaz) kroz elemente liste. Metoda Sort sortira elemente liste. Metoda Reverse() prikazuje elemente liste u inverznom redosledu. Metoda ToArray() kopira elemente liste u jednodimenzionalan niz.


Upotreba ArrayList kolekcije

U nastavku je prikazan način kreiranja ArrayList kolekcije, način dodavanja članova u listu kao i način brisanja članova sa kraja liste.

ArrayList al = new ArrayList();
al.Add(1);
al.Add("Mika");
al.Add(2.456);
al.RemoveAt(0);
IEnumerator mojEnumerator = al.GetEnumerator();

while(mojEnumerator.MoveNext())
{
     Console.WriteLine( mojEnumerator.Current.ToString());
}

Radi jednostavne iteracije kroz listu iskorišćena je metoda GetEnumerator koja vraća enumerator liste. While petlja služi za štampanje elemenata liste. Enumerator se na početku pozicionira ispred prvog elementa kolekcije. Prvim pozivom metode MoveNext on se pozicionira na prvi element liste, sledećim pozivom na drugi itd. Kada se stigne do kraja liste metoda MoveNext vraća false. Property Curent daje tekući element liste.

Da bi korišćenje kolekcija bilo moguće, učitavamo prostor imena Collections:

using System.Collections;

  

Redovi (Queues)

Redovi predstavljaju realizaciju FIFO (first-in, first-out) strukture podataka. Metoda Enqueue služi za dodavanje elemenata u red. Ulazni parametar ove metode je tipa object tj. može biti bilo koji tip podataka. Skidanje elemenata iz reda vrši se korišćenjem metode Dequeue koja nema ulazne parametre. Kada se pozove ova metoda iz reda se izbacuje najstariji član tj. član koji je prvi ubačen u red. Za jednostavan prolazak kroz red koristi se metoda GetEnumerator koja vraća enumerator reda.

 

Primer upotrebe Queue-a

U nastavku je ilustrovana upotreba reda. Najstariji član u redu je karakter ‘A' pa se pozivom metode Dequeue on izbacuje iz reda. Rezultat izvršavanja sekvence koda prikazan je ispod koda.

Queue mojRed = new Queue();
mojRed.Enqueue(‘A');
mojRed.Enqueue(1);
mojRed.Enqueue(‘B');
mojRed.Enqueue(2);

mojRed.Dequeue();

IEnumerator mojEnumerator = mojRed.GetEnumerator();

while(mojEnumerator.MoveNext())
{
     Console.WriteLine(mojEnumerator.Current.ToString() );
}

Rezultat izvršavanja sekvence koda je:
1
B
2


Stekovi (Stacks)

Stack je LIFO (Last-in, first-out) struktura. Element koji se poslednji stavi na stek, prvi se skida sa steka. Metoda Push stavlja element na vrh steka. Metoda Pop skida poslednje stavljeni element sa steka. Metoda GetEnumerator takođe daje enumerator steka koji služi za jednostavan prolaz kroz elemente steka.


Upotreba stack-a

Ovde je prikazan primer upotrebe stack strukture, dodavanje elemenata na stack, skidanje elemenata sa stack-a, prolazak kroz elemente steka.

Stack mojStack = new Stack();
mojStack.Push("Hello");
mojStack.Push(1);
mojStack.Push("World");
mojStack.Push("!");

mojStack.Pop();
mojStack.Pop();

IEnumerator mojEnumerator = mojStack.GetEnumerator();
while(mojEnumerator.MoveNext())
{
     Console.WriteLine(mojEnumerator.Current );
}

Rezultat izvršavanja sekvence koda je:
1
"Hello"

  

Hash tabele

Hash tabela je struktura podataka dizajnirana za brzo pretraživanje. To se postiže dodeljivanjem ključa svakom objektu koji se čuva u tabeli. Stringu "Idi na sever" dodeljuje se ključ ‘N'. Vrednosti koja odgovara ključu ‘N' se pristupa korišćenjem izraza tabela['N'], gde je tabela instanca klase Hashtable. Metoda GetEnumerator() takođe vraća enumerator koji je tipa IDictionaryEnumerator. Pomoću ovog enumeratora se može prikazati ključ i njemu pridružena vrednost za sve elemente tabele.

Hashtable tabela = new Hashtable();
tabela.Add('N',"Idi na sever");
tabela.Add('S',"Idi na jug");
tabela.Add('W',"Idi na zapad");
tabela.Add('E',"Idi na istok");
tabela.Add('Q',"Dovidjenja");
Console.WriteLine(tabela['N']) ;
IDictionaryEnumerator mojEnumerator = tabela.GetEnumerator();
while( mojEnumerator.MoveNext() )
{
     Console.WriteLine( mojEnumerator.Key.ToString()+ "----->" +
     mojEnumerator.Value.ToString());
}


Smatrate da je ova lekcija korisna?  Preporučite je. Broj preporuka:0


Molimo Vas unesite svoje podatke i dobićete pristup besplatnim lekcijama.

Ime: 
Prezime: 
Email: