Zadatak
Napisati programu u jeziku C# za rad sa kolekcijama (ArrayList, Queue, Stack, Hashtable), odnosno, pomoću programa je potrebno prikazati način dodavanja, brisanja i kretanja kroz kolekciju. Program napraviti kao Windows aplikaciju da izgleda kao na slici ispod (Slika 23.1).
Slika 23.1 – Izgled programa
Svojstva komponenti (svojstva koja nisu navedena u listi ispod su ostavljena kao podrazumevana svojstva koje napravi VS 2008):
- Button
- prvo dugme – Name: button1, Text: ArrayList
- drugo dugme – Name: button2, Text: Queue
- treće dugme – Name: button3, Text: Stacks
- četvrto dugme – Name: button4, Text: Hash
- RichTextBox
- Name: richTextBox1
- Form
- Name: Form1, Text: Rad sa kolekcijama (collections), Size: 508; 289, StartPosition: CenterScreen
Rešenje:
Napraviti Windows formu kao na slici iz postavke zadatka (Slika 23.1) i koristiti komponente i svojstva komponenti navedene u listi iznad. Potrebno je u Prostor imena dodati biblioteku za kolekcije, odnosno, kada odete u kod svoje forme (View – > Code), na vrhu je potrebno dodati sledeće: using System.Collections;. Nakon završetka dizajna, Solution Explorer (View – > Solution Explorer Ctrl + Alt + L) bi trebao izgledati kao na slici ispod (Slika 23.2).
Slika 23.2 – Izgled Solution Explorera
Kod za prvo dugme (ArrayList) (Akciju za dugme dodajete duplim klikom na dugme u Design modu):
ArrayList al = new ArrayList(); // instanciranje al objekta
al.Add(1); // dodavanje stavke u listu
al.Add("ITS");
al.Add(2.456);
al.RemoveAt(0); // brisanje stavke iz liste na odredjenom indeksu
IEnumerator mojEnumerator = al.GetEnumerator(); //daje mogucnost kretanju kroz listu
while (mojEnumerator.MoveNext()) // na svakom koraku, idi na sledeci clan liste
{
// trenutni clan liste koji se obradjuje dodaj u richTextBox
richTextBox1.AppendText(mojEnumerator.Current.ToString() + "!nl!");
}
Kod za drugo dugme (Queue) (Akciju za dugme dodajete duplim klikom na dugme u Design modu):
Queue mojRed = new Queue(); // instanciranje mojRed objekta kao reda (queue)
mojRed.Enqueue('A'); // dodavanje stavke u red
mojRed.Enqueue(1);
mojRed.Enqueue('B');
mojRed.Enqueue(2);
mojRed.Dequeue(); // brisanje zadnje dodane stavke iz reda
IEnumerator mojEnumerator = mojRed.GetEnumerator(); //daje mogucnost kretanju kroz listu
while (mojEnumerator.MoveNext()) // na svakom koraku, idi na sledeci clan reda
{
// trenutni clan reda koji se obradjuje dodaj u richTextBox
richTextBox1.AppendText(mojEnumerator.Current.ToString() + "!nl!");
}
Kod za treće dugme (Stack) (Akciju za dugme dodajete duplim klikom na dugme u Design modu):
// instanciranje mojStack objekta kao steka (stack – LIFO)
Stack mojStack = new Stack();
mojStack.Push("Hello"); // dodaj stavku u stack
mojStack.Push(1);
mojStack.Push("World");
mojStack.Push("!");
mojStack.Pop(); // obrisi zadnje dodanu stavku iz stacka
mojStack.Pop();
IEnumerator mojEnumerator = mojStack.GetEnumerator(); // daje mogucnost kretanju kroz stack
while(mojEnumerator.MoveNext()) // na svakom koraku, idi na sledeci clan stack-a
{
// trenutni clan stack-a koji se obradjuje dodaj u richTextBox
richTextBox1.AppendText(mojEnumerator.Current.ToString() +"!nl!");
}
Kod za četvrto dugme (Hash) (Akciju za dugme dodajete duplim klikom na dugme u Design modu):
// instanciranje tabela objekta kao hash tabele
Hashtable tabela = new Hashtable();
tabela.Add('P', "Proba"); // dodavanje stavke u hash
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");
tabela.Remove('P'); // brisanje stavke iz hash tabele na osnovu kljuca
// clan pod odredjenim kljucem dodaj u richTextBox
richTextBox1.AppendText(tabela['N'].ToString());
richTextBox1.AppendText("!nl!———————–!nl!");
// daje mogucnost kretanju kroz hash
IDictionaryEnumerator mojEnumerator = tabela.GetEnumerator();
while (mojEnumerator.MoveNext()) // na svakom koraku, idi na sledeci clan hash tabele
{
//trenutni clan hash tabele koji se obradjuje dodaj u richTextBox
richTextBox1.AppendText(mojEnumerator.Key.ToString() + "—->" + mojEnumerator.Value.ToString() + "!nl!");
}
Kompletno rešenje ovog primera, sa izvornim kodom, možete preuzeti ovde.