Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.
Patrząc na materiał który dzisiaj mamy do przerobienia artykuł nie powinien być długi a pomówimy sobie o kolekcjach i słownikach. Czyli o bardzo pomocnych typach danych :)
Kolekcje
Kolekcja jest klasą która pozwala na dodawanie elementów a później iterowanie po nich. .NET Framework udostępnia nam następujące klasy kolekcji:
ArrayList – prosta klasa która umożliwia przechowywanie dowolnego typu danych oraz iterowanie po nich. Można ją oczywiście rozszerzyć do własnych celów etc.
Queue – nic innego jak kolekcja FIFO (first-in, first-out)
Stack – kolega FIFO czyli LIFO (last-in, first-out)
StringCollection – rodzaj ArrayList który przechowuje wartości string. Nie ma zaimplementowanego sortowania
BitArray – kolekcja przechowująca wartości typu boolean.
ArrayList
Czas na przykład użycia ArrayList. Dla przypomnienia dodam, że klasa ta mieście się w przestrzeni nazw System.Collection . W poniższym przykładzie utworzymy sobie taka kolekcje i dodamy do niej cztery różnorakie elementy a następnie przy pomocy pętli foreach wyświetlimy zawartość listy. Dla przypomnienia dodam, że przykłady są zaczerpnięte z training kit’a (dodaje to żeby nie być posądzonym o jakieś plagiaty ;) ) Robie to świadomie żeby nie wymyślać kodu do prostej prezentacji danych dobrodziejstw .NET-u.
1: ArrayList al = new ArrayList();
2: al.Add("Hello");
3: al.Add("World");
4: al.Add(5);
5: al.Add(new FileStream("delemete", FileMode.Create));
6: Console.WriteLine("The array has " + al.Count + " items:");
7: foreach (object s in al)
8: Console.WriteLine(s.ToString());
Po skompilowaniu kodu na ekranie powinno nam się wyświetlić:
The array has 4 items:
Hello
World
5
System.IO.FileStream
W kolejnym przykładzie posortujemy dodane elementy zaimplementowaną automatycznie metodą Sort. Ale żeby nie było nudno użyjemy metody Remove do usunięcia elementu i metody Insert która pozwala nam w określone miejsce listy dopisać dowolny element.
1: ArrayList al = new ArrayList();
2: al.Add("Hello");
3: al.Add("World");
4: al.Add("this");
5: al.Add("is");
6: al.Add("a");
7: al.Add("test");
8: al.Remove("test");
9: al.Insert(4, "not");
10: al.Sort();
11: foreach (object s in al)
12: Console.WriteLine(s.ToString());
Na ekranie zostanie wyświetlone:
A
Hello
is
not
this
World
Pięknie posortowane z usuniętym elementem “test” oraz dodanym “not”.
Queue and Stack
Klasy te przechowują elementy które można pobrać i usunąć w pojedynczym kroku… Kolejka jak już pisałem charakteryzuje się tym, że dane są obsługiwane w takiej kolejności jak zostały do niej wrzucone. Natomiast w stosie jest tak, że dane najpóźniej dodane są wcześniej obsługiwane. Queue do dodania i usunięcia elementu używa metod Enqueue i Dequeue natomiast Stack odpowiednio Push i Pop. Przykład demonstruje różnice pomiędzy klasami.
1: Queue q = new Queue();
2: q.Enqueue("Hello");
3: q.Enqueue("world");
4: q.Enqueue("just testing");
5: Console.WriteLine("Queue demonstration:");
6: for (int i = 1; i <= 3; i++)
7: Console.WriteLine(q.Dequeue().ToString());
8: Stack s = new Stack();
9: s.Push("Hello");
10: s.Push("world");
11: s.Push("just testing");
12: Console.WriteLine("Stack demonstration:");
13: for (int i = 1; i <= 3; i++)
14: Console.WriteLine(s.Pop().ToString());
Dictionaries
Słownik to kolekcja powiązań wartość –> klucz. Na prostym przykładzie każde państwo ma swoją stolice…państwo->stolica. .NET Framework udostępnia następujące klasy słowników:
Hashtable – słownik nazwa/wartość z którego dane można wyjąć za pomocą nazwy bądź indeksu
SortedList – słownik automatycznie posortowany wg klucza
StringDictionary – rodzaj Hashtable realizowany podobnie jak w kolekcjach StringCollection
ListDictionary – słownik zoptymalizowany dla małej listy obiektów posiadający mniej niż 10 pozycji
HybridDictionary – słownik który używa ListDictionary kiedy ilość elementów jest mała, kiedy jednak wzrośnie automatycznie przełącza się w Hashtable
NameValueCollection – nazwa/wartość który umożliwa wyszukiwanie po nazwach bądź indeksach
Przykłady użycia można znaleźć w internecie…ja nie przedłużam, dzięki za poświęcenie czasu mam nadzieje, że czegoś się dowiedziałeś drogi czytelniku a jak nie to chociaż sobie przypomniałeś.
Kolejny artykuł z serii to 70-536: Generic Collections