Kolekcje i algorytmy (Generics)

Collections

System.Collections

ArrayList

Array - algorytmy do manipulacji tablicami

System.Collections.Generic, m.in.:

List

Dictionary

SortedDictionary

IEnumerable<T> Interface

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 - Lista płac

Utwórz klasę reprezentującą listę płac w firmie. Do listy płac można dodać dowolną ilość pracowników, listę można wydrukować na ekranie, zapisać do pliku oraz posortować względem wysokości pensji. Wykorzystaj w tym celu klasy pochodzące z rozwiązania zadania Firma z poprzednich zajęć.

Klasa udostępnia następujące operacje:

metodę pozwalającą dodać nowego pracownika do listy

przeciążoną metodę ToString() zwracająca tekst zawierający listę płac. W każdym wierszu tekstu znajduje się wpis dotyczący pojedynczego pracownika: numer porządkowy, imię, nazwisko oraz wysokość pensji.

metodę pozwalającą posortować listę względem wysokości pensji, od najwyższej do najniższej.
Kolejność ta powinna być widoczna po wywołaniu metody ToString(). Sortowanie kolekcji wymaga utworzenie delegata realizującego porównanie Comparison lub obiektu implementującego interfejs IComparer.

konstruktor domyślny

konstruktor pozwalający zainicjować listę płac dowolną kolekcją (enumerowalną) zawierającą obiekty związane z pracownikami

metodę pozwalającą zapisać listę w postaci tekstowej do pliku o nazwie danej w argumencie metody

klasa reprezentująca listę płac implementuje interfejs IEnumerable<T>, pozwalając na iterowanie po kolejnych pracownikach umieszczonych na liście.

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 (interfejs IClonable)

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 metody ToString(). 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>.