====== Kolekcje i algorytmy (Generics) ======
===== Collections =====
* [[http://msdn.microsoft.com/en-us/library/system.collections%28v=vs.110%29|System.Collections]]
* [[http://msdn.microsoft.com/en-us/library/system.collections.arraylist%28v=vs.110%29.aspx|ArrayList]]
* [[http://msdn.microsoft.com/en-us/library/system.array%28v=vs.110%29.aspx|Array]] - algorytmy do manipulacji tablicami
* [[http://msdn.microsoft.com/en-us/library/system.collections.generic%28v=vs.110%29.aspx|System.Collections.Generic]], m.in.:
* [[http://msdn.microsoft.com/en-us/library/6sh2ey19%28v=vs.110%29.aspx|List]]
* [[http://msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.110%29.aspx|Dictionary]]
* [[http://msdn.microsoft.com/en-us/library/f7fta44c%28v=vs.110%29.aspx|SortedDictionary]]
==== Przykład: Lista - losowanie Lotto ====
using System;
using System.Collections.Generic;
namespace Lotto
{
class Program
{
static void Main(string[] args)
{
List lista = new List();
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(lista);
for (int i = 0; i < 6; i++) Console.Write("{0} ", lista[i]);
Console.WriteLine();
lista.Sort();
}
public static void Shuffle(List 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 slownik = new SortedDictionary();
while ((line = Console.ReadLine()) != null)
{
if (!slownik.ContainsKey(line)) slownik.Add(line,1);
else slownik[line]++;
}
foreach (KeyValuePair 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 [[.:csharp_dziedziczenie|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 [[http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx|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]// [[http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx|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 [[http://msdn.microsoft.com/en-us/library/tfakywbh.aspx|Comparison]] lub obiektu implementującego interfejs [[http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx|IComparer]].
* Niech klasa reprezentująca wykres implementuje interfejs ''IEnumerable''.