Kolekcje i algorytmy (Generics)
Collections
-
- Array - algorytmy do manipulacji tablicami
- System.Collections.Generic, m.in.:
Przykład: Lista - losowanie Lotto
using System; using System.Collections.Generic; namespace Lotto { class Program { static void Main(string[] args) { List<int> lista = new List<int>(); for (int i = 1; i <= 49; i++) lista.Add(i); Console.WriteLine("Zawartośc kolekcji"); foreach (int i in lista) Console.Write("{0} ", i); Console.WriteLine("\n\nSize={0} Capacity={1}", lista.Count, lista.Capacity); Console.Write("Losowanie Lotto: "); Shuffle<int>(lista); for (int i = 0; i < 6; i++) Console.Write("{0} ", lista[i]); Console.WriteLine(); lista.Sort(); } public static void Shuffle<T>(List<T> sequence) { Random random = new Random(); for (int i = 0; i < sequence.Count; i += 1) { int swapIndex = random.Next(sequence.Count); if (swapIndex != i) { T tmp = sequence[i]; sequence[i] = sequence[swapIndex]; sequence[swapIndex] = tmp; } } } } }
Przykład: Dictionary (słownik)
using System; using System.Collections.Generic; namespace Dictionary { class Program { static void Main(string[] args) { string line; SortedDictionary<string, int> slownik = new SortedDictionary<string, int>(); while ((line = Console.ReadLine()) != null) { if (!slownik.ContainsKey(line)) slownik.Add(line,1); else slownik[line]++; } foreach (KeyValuePair<string, int> kvp in slownik) Console.WriteLine("{0} {1}", kvp.Key, kvp.Value); } } }
Zadanie - Figury na wykresie
Zaimplementuj klasę o nazwie Wykres
realizującą dwuwymiarowy układ współrzędnych. Wykres przechowuje zbiór figur zaimplementowanych na poprzednich zajęciach. Klasa ta stanowi więc pojemnik do którego możemy dodać dowolną liczbę punktów, kół oraz trójkątów. Do przechowywania figur użyj wybranej kolekcji z przestrzeni nazw System.Collections.Generic.
Dla obiektu reprezentującego wykres zaimplementuj:
- konstruktor domyślny
- konstruktor przyjmujący jako argument tablicę figur
- [dla zaawansowanych] konstruktor przyjmujący jako argument dowolną kolekcję figur
- metodę
Clone()
tworzącą kopię obiektu (interfejsIClonable
) - metodę pozwalającą dodawać figury do wykresu
- własność
LiczbaFigur
do odczytu liczby przechowywanych w kolekcji figur - zaimplementuj metodę dającą dostęp do elementu wykresu o podanym indeksie
- [dla zaawansowanych] indekser dający dostęp do figury o podanym indeksie
- dociąż metodę
ToString()
umieszczającą w łańcuchu znakowym informacje o wszystkich elementach umieszczonych na wykresie - W klasie reprezentującej wykres zaimplementuj metodę
Sort()
, która posortuje kolekcję figur na wykresie w rosnącym porządku ze względu na wartość obwodu.
Kolejność ta powinna być widoczna po wywołaniu metodyToString()
. Sortowanie kolekcji wymaga utworzenie delegata realizującego porównanie Comparison lub obiektu implementującego interfejs IComparer. - Niech klasa reprezentująca wykres implementuje interfejs
IEnumerable<T>
.