Strona główna » Kursy » Kurs C# » Krotki
 

Krotki

Wstęp

Krotka to struktura danych, która pozwala przechować kilka informacji o pewnym obiekcie. Ich tworzenie jest bardzo proste i są często używane zamiast prostych struktur. Mają jednak swoje ograniczenia. W tym artykule zostanie wyjaśnione jak w programie można z krotek korzystać.

Z krotek można korzystać na platformie .NET Framework począwszy od wersji 4.0.

Deklaracja

Do tworzenia krotek służy klasa Tuple. Podczas deklaracji klasy należy dokładnie określić jaki typ danych będzie przechowywany w krotce. Przykładowo w celu przechowania wartości logicznej, liczby oraz ciągu znaków należy wpisać:

  1. Tuple<bool, int, string> tuple1 = new Tuple<bool, int, string>(true, 1, "tekst");

W konstruktorze od razu podaje się wartości, które mają zostać przypisane do krotki. Jak można zauważyć deklaracja klasy krotki jest bardzo długa, bo trzeba podać wszystkie używane typy danych. Częściowym ułatwieniem jest skorzystanie z zmiennej var tak jak poniżej:

  1. var tuple2 = new Tuple<bool, int, string>(false, 2, "abc");

Odczytywanie informacji

W celu odczytania informacji zapisanej na pozycji X można odczytać poprzez właściwość ItemX krotki. Przykładowo, aby wypisać kolejne elementy krotki wystarczy poniższy kod:

  1. bool b = tuple1.Item1;
  2. Console.WriteLine("T/F\t{0}", b);
  3. int a = tuple1.Item2;
  4. Console.WriteLine("Liczba\t{0}", a);
  5. string s = tuple1.Item3;
  6. Console.WriteLine("Tekst\t{0}", s);

W wyniku na konsolę zostanie wypisane:

  1. T/F     True
  2. Liczba  1
  3. Tekst   tekst

Edycja danych

Dane, które zostały zapisane do krotki nie mogą zostać nadpisane. Z tego powodu najczęściej się jest stosuje jako wynik zapytaniado bazy danych, gdzie zwracane są pewne rekordy, które są tylko do odczytu. W celu zmiany informacji o krotce należałoby utworzyć nową krotke. (Aktualizacja w bazie danych polega na ponownym przesłaniu danych, a nie zmianie tych, które zostały zwrócone.)

Wypisywanie krotki

Krotka jako klasa jest bardzo wygodna nie tylko, dlatego, że można przechowywać dowolne typy danych, ale z powodu wygody ich wypisania. Krotkę można przekazać bezpośrednio do metody wypisującej dane na konsolę. Dane zostaną sformatowane, a następnie wyświetlone na konsoli. Kolejne elementy krotki są rozdzielone przecinkiem, a wszystkie dane są ujęte w nawiasy okrągłe.

Krotka zadeklarowana na początku artykułu zostanie wyświetlona na konsoli jako:

  1. (True, 1, tekst)

Zwracanie krotek

Krotka pozwala na zwrócenie np. pary wartości jak wynik funkcji bez deklarowania dodatkowej struktury danych. Przykładowo dzięki temu można napisać funkcję, która dla podanych dwóch liczb zwróci równocześnie ich sumę oraz różnicę.

  1. static Tuple<int, int> sumaroznica(int a, int b) {
  2.   return new Tuple<int, int>(a + b, a - b); ;
  3. }

Później w celu skorzystania z zwróconej wartości wystarczy poniższy fragment kodu:

  1. static void Main(string[] args) {
  2.   int a = 3, b = 2;
  3.   var dane = sumaroznica(a, b);
  4.   Console.WriteLine("Suma\t{0}", dane.Item1);
  5.   Console.WriteLine("Różnica\t{0}", dane.Item2);
  6.   Console.ReadKey();
  7. }
  1. Suma    5
  2. Różnica 1

Zadania

Zadanie 1

Napisz funkcję minmax(), która dla podanej tablicy liczb całkowitych zwróci krotkę w której klejno znajdzie się informacja o najmniejszej wartości w tablicy oraz największej wartości w tablicy. Przetestuj działanie napisanej funkcji.

Przykładowo dla tablicy [1, 5, 2, 7, 3, 4] program powinien wypisać na konsolę:

  1. (1, 7)