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.