Wykład 4 Klasa List Kolejki Stosy Słowniki
Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien zarezerwować na pomieszczenie wszystkich przetwarzanych danych. Rozwiązaniem tego problemu jest w C# klasa List - tablica, która dynamicznie zmienia swoją długość. Klasa ta udostępnia szereg wygodnych w użyciu metod i właściwości zebrano je w tabeli 4.1.
Tabela 4.1. Metody i właściwości klasy List Metoda lub właściwość Capacity Count Item() Add() AddRange() BinarySearch() Clear() Contains() CopyTo() Exists() Find() FindAll() GetEnumerator() GetRange() IndexOf() Insert() InsertRange() LastIndexOf() Remove() RemoveAt() RemoveRange() Reverse() Sort() ToArray() TrimToSize() Działanie Właściwość do pobierania i ustawiania liczby elementów, które może zawierać lista Zwraca liczbę aktualnie przechowywanych elementów Pobiera element o określonym indeksie lub przypisuje do niego wartość Metoda publiczna dodaje element do listy Publiczna metoda, która dodaje na koniec listy elementy z ICollection Wyszukuje binarnie określony element w posortowanej liście Usuwa z listy wszystkie elementy Określa czy dany element znajduje się na liście Kopiuje listę do jednowymiarowej tablicy Sprawdza czy element znajduje się na liście Zwraca pierwsze wystąpienie elementu na liście Zwraca wszystkie dane elementy występujące na liście Zwraca licznik, który umożliwia przechodzenie po elementach listy Kopiuje zakres elementów do nowej listy Zwraca indeks pierwszego wystąpienia danej wartości na liście Dodaje element do listy Dodaje zakres elementów kolekcji do listy Zwraca indeks ostatniego wystąpienia wartości na liście Usuwa z listy pierwsze wystąpienie określonego elementu z listy Usuwa element o podanym indeksie Usuwa zakres elementów Odwraca kolejność elementów listy Sortuje listę Kopiuje elementy listy do nowej tablicy Ustawia pojemność (właściwość Capacity) na aktualną liczbę elementów listy
Listing 4.1 using System; using System.Collections.Generic; using System.Text; namespace Przyklad_3_1 public class Pracownik private int pracid; private string nazwisko; public Pracownik(int pracid, string nazwisko) // Konstruktor this.pracid = pracid; this.nazwisko = nazwisko; public int PracID get return pracid; set pracid = value;
public string Nazwisko get return nazwisko; set nazwisko = value;
public class Program public static void wyswietllistę(list<pracownik> plist) for (int i = 0; i < plist.count; i++) Console.WriteLine(" 0: 1", plist[i].pracid.tostring(), plist[i].nazwisko.tostring()); static void Main() List<Pracownik> praclist = new List<Pracownik>(); for (int i = 0; i < 10; i++) praclist.add(new Pracownik((i + 1) * 100, "Abcde" + (char)(i+65))); wyswietllistę(praclist); praclist.add(new Pracownik(300 + 7, "Kościuszko")); Console.WriteLine("Po dodaniu jeszcze jednego elementu"); wyswietllistę(praclist); Console.Write("Aby kontunuować naciśnij dowolny klawisz... "); Console.ReadKey();
Kolejki Kolejka jest kolekcją typu FIFO (First-In, First-Out ) Metody i właściwości klasy Queue zebrano w tabeli 4.2. Tabela 4.2 Metoda lub właściwość Count Clear() Contains() CopyTo() Dequeue() Enqueue() GetEnumerator() Peek() ToArray() Działanie Właściwość publiczna, która zwraca liczbę elementów kolejki Usuwa z kolejki wszystkie obiekty Sprawdza, czy dany element znajduje się w kolejce Kopiuje elementy kolejki do istniejącej tablicy jednowymiarowej Usuwa i zwraca element znajdujący się na początku kolejki Dodaje obiekt na koniec kolejki Zwraca licznik kolejki Zwraca element znajdujący się na początku kolejki, ale go nie usuwa Kopiuje elementy do nowej tablicy
using System; using System.Collections.Generic; using System.Text; /// Przykład 4.1 - ilustracja działania kolejki namespace W_4_Kolejki public class Program static void Main() Queue<Int32> całkowite = new Queue<Int32>(); for (int i = 0; i < 5; i++) całkowite.enqueue(i * 3); Console.Write("Wartości elementów kolejki: \t"); PokażWartości(całkowite); Console.WriteLine("\n(Dequeue)\t0", całkowite.dequeue()); Console.Write("Wartości elementów kolejki: \t"); PokażWartości(całkowite); Console.WriteLine("\n(Dequeue)\t0", całkowite.dequeue()); Console.Write("Wartości elementów kolejki: \t"); PokażWartości(całkowite); Console.WriteLine("\n(Peek)\t0", całkowite.peek()); Console.WriteLine("\n(Enqueue)\t0", 125); całkowite.enqueue(125); PokażWartości(całkowite); Console.Write("Wartości elementów kolejki: \t"); PokażWartości(całkowite); Console.Write("Aby zakończyć naciśnij dowolny klawisz..."); Console.ReadKey();
/// <summary> /// Metoda PokażWartości używa intefejsu IEnumerable /// wyświetla wartości elementów kolejki /// </summary> public static void PokażWartości(IEnumerable<Int32> mojakolekcja) IEnumerator<Int32> mójindeksator = mojakolekcja.getenumerator(); while (mójindeksator.movenext()) Console.Write("0 ", mójindeksator.current); Console.WriteLine(); W powyższym przykładzie elementy kolejki udostępniono za pomocą interfejsu IEnumerable pełniącego rolę indeksatora. O interfejsach, sposobie ich definiowania i wykorzystywania będzie mowa nieco później.
Stosy Stos jest kolekcją typu LIFO (Last-In, First-Out ) Metody i właściwości klasy Stack zebrano w tabeli 4.3. Tabela 4.3. Metoda lub właściwość Count Clear() Clone() Contains() CopyTo() GetEnumerator() Peek() Pop() Push() ToArray() Działanie Właściwość publiczna, która zwraca liczbę elementów stosu Usuwa ze stosu wszystkie obiekty Tworzy kopię stosu Sprawdza, czy dany element znajduje się na stosie Kopiuje elementy stosu do istniejącej tablicy jednowymiarowej Zwraca licznik stosu Zwraca element znajdujący się na szczycie stosu, ale go nie usuwa Usuwa i zwraca obiekt ze szczytu stosu Wstawia obiekt na szczyt stosu Kopiuje elementy do nowej tablicy
using System; using System.Collections.Generic; using System.Text; namespace W_4_Stos public class Punkt3D private string nazwa; private double x; private double y; private double z; public Punkt3D(string nazwa) // konstruktor this.nazwa = nazwa; this.x = 0; this.y = 0; this.z = 0; public Punkt3D(string nazwa, double x, double y, double z) // konstruktor przeciążony this.nazwa = nazwa; this.x = x; this.y = y; this.z = z; // akcesory public string Nazwa get return nazwa; public double X get return x; public double Y get return y; public double Z get return z;
public class Program static void Main(string[] args) Stack<Punkt3D> Stos = new Stack<Punkt3D>(); Punkt3D p; // umieszczamy elementy na stosie Stos.Push(new Punkt3D("Słońce")); Stos.Push(new Punkt3D("Merkury", 1200, 3456, 781)); Stos.Push(new Punkt3D("Wenus", 7856, 13890, 2345.78)); for (int i = 0; i < 5; i++) Stos.Push(new Punkt3D("Gwiazda" + i, 100 * i, 200 * i, 300 * 1)); // wyświetlenie stosu Console.WriteLine("Elementy stosu: "); PokażWartości(Stos); // zdejmuje element ze stosu p = Stos.Pop(); Console.WriteLine("0: 1 2 3", p.nazwa, p.x, p.y, p.z); // wyświetlenie stosu Console.WriteLine("Elementy stosu: "); PokażWartości(Stos); // pobiera szczyt stosu, ale go nie wyświetla p = Stos.Peek(); Console.WriteLine("0: 1 2 3", p.nazwa, p.x, p.y, p.z); // wyświetlenie stosu Console.WriteLine("Elementy stosu: "); PokażWartości(Stos); Console.Write("Aby kontynuować naciśnij dowolny klawisz..."); Console.ReadKey();
public static void PokażWartości(IEnumerable<Punkt3D> mojakolekcja) IEnumerator<Punkt3D> indeks = mojakolekcja.getenumerator(); while (indeks.movenext()) Console.WriteLine("0: 1 2 3", indeks.current.nazwa, indeks.current.x, indeks.current.y, indeks.current.z);
Słowniki Słownik jest kolekcją, która zawiera wartości powiązane z kluczami. Klasa słownika udostępniana przez.net pozwala łączyć dowolny typ klucza (łańcuchy znaków, liczby całkowite, obiekty itp.) z wartościami dowolnego typu. Właściwości i metody klasy Dictionary pokazano w tabeli 4.4
Tabela 4.4 Metoda lub właściwość Count Clear() Item() Keys Values Add() ContainsKey() ContainsValue() GetEnumerator() Działanie Właściwość publiczna, która zwraca liczbę elementów słownika Usuwa ze słownika wszystkie obiekty Mechanizm indeksowania słownika Publiczna właściwość, która zwraca kolekcję zawierającą klucze słownika Publiczna właściwość, która zwraca kolekcję zawierającą wartości słownika Dodaje element o określonym kluczu i wartości Sprawdza, czy dany klucz znajduje się w słowniku Sprawdza, czy dana wartość znajduje się w słowniku Zwraca licznik słownika GetObjectData() Obsługuje intefejs Iserializable i zwraca dane potrzebne do serializacji słownika Remove() Usuwa element o podanym kluczu
using System; using System.Collections.Generic; using System.Text; namespace W_4_Slownik public class Program static void Main(string[] args) // Tworzy i inicjuje nowy słownik Dictionary<string, string> mójsłownik = new Dictionary<string, string>(); mójsłownik.add("tadeusz", "Kościuszko"); mójsłownik.add("adam", "Mickiewicz"); mójsłownik.add("anna", "Achmatowa"); mójsłownik.add("stanisław", "Barańczak"); // Dostęp do konkretnego elementu słownika Console.WriteLine("mójSłownik[\"Anna\"]: 0", mójsłownik["anna"]); Console.WriteLine("mójSłownik[\"Stanisław\"]: 0", mójsłownik["stanisław"]); Console.Write("Aby kontynuować naciśnij dowolny klawisz..."); Console.ReadKey();