Skip to content

Instantly share code, notes, and snippets.

@pjastr
Last active December 15, 2017 16:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjastr/8d0a76493b215dc8b9048956686462d6 to your computer and use it in GitHub Desktop.
Save pjastr/8d0a76493b215dc8b9048956686462d6 to your computer and use it in GitHub Desktop.

Tablice jednowymiarowe

Jak stworzyć tablicę w typach prostych i referencyjnych?

Bezpośrednio:

int[] liczby = new int[5];
Osoba[] osoby = new Osoba[2];

lub poprzez wskazanie i dodanie elementów (nie deklarujemy liczby elementów w tablicy):

string[] dniTygodnia = { "poniedziałek", "wtorek", "śr", "cz", "pi", "so", "ni" }; 
Osoba[] osoby2 = { new Osoba("Jan",37), new Osoba("Anna",22), new Osoba("Krzysztof",11) };

(w klasie Osoba musi być odpowiedni konstruktor).

Jaka przestrzeń nazw (using…) jest potrzebna?

Żadna. Chyba, że użyty typ tego wymaga.

Co się dzieje, gdy dodajemy byty innego typu albo różnych typów?

Zależy od kontekstu. Np. instrukcja liczby[3] = "sss"; dla tablicy int zakończy się błędem kompilacji (Cannot implicitly convert type string to int). Jeśli mamy jednak typ referencyjny (pochodzący od jakiejś klasy) w tablicy, to obiekty w typach klas pochodnych jak najbardziej mogą być umieszczone na tablicy (korzystamy wtedy z rzutowania w górę).

Jak dodaje się elementy na tablicę, czy trzeba po kolei, czy można dowolnie?

Po inicjacji tablicy mamy już ustaloną w niej liczbę elementów. Jeśli poszczególnym elementom nie nadaliśmy jawnie wartości, są im przypisywane domyślne (dla typów liczbowych zera, dla char pusty znak, dla string pusty string, dla typów referencyjnych null). Wprost wymiar tablicy jest stały, więc nie dodamy kolejnych elementów. Możemy albo zmienić wartość już istniejących elementów albo zmienić rozmiar tablicy.

Aby nadpisać istniejący element w tablicy, to odnosimy się po tzw. indeksatorze: liczby[2] = 5;.

Przykładowy kod do zmiany rozmiaru tablicy:

            string[] k = new string[5];
            k[0] = "UUU";
            k[1] = "ZZZ";
            Console.WriteLine(k.Length);
            Array.Resize(ref k, 10);
            Console.WriteLine("po zmianie");
            Console.WriteLine(k.Length);

(potrzebujemy using System;).

Jak wypisać wszystkie elementy tablicy na konsoli?

Użycie pętli for (po indeksie tablicy) lub foreach.

Jak zwrócić ostatni i pierwszy element z tablicy?

Pierwszy - czyli po indeksie zero np. k[0].

Ostatni - wprost nie mamy możliwości. Możemy jednak sprawdzić wymiar i pobrać odpowiedni indeks np. k[k.Length-1].

Jak zwrócić dowolny element z tablicy/kolekcji, o ile to możliwe?

Bezpośrednio do numerze indeksu.

Jak posortować elementy na tablicy?

Dla tablic typów wartościowych możemy skorzystać z klasy Array:

string[] dniTygodnia = { "poniedziałek", "wtorek", "śr", "cz", "pi", "so", "ni" };
Array.Sort(dniTygodnia);

Dla typów refencyjnych możemy użyć z podobnej konstrukcji:

Osoba[] osoby2 = { new Osoba("Jan", 37), new Osoba("Anna", 22), new Osoba("Krzysztof", 11) };
Array.Sort(osoby2);

ale aby działało to poprawnie, musimy dodać mechanizm porównywania do klasy np. interfejs IComparable<T>.

Jak sprawdzić rozmiar/liczbę elementów w tablicy?

Właściwość Lenght.

Jak sprawdzić czy tablica zawiera daną wartość/referencję?

Można to zrobić na kilka sposóbów:

  • za pomocą pętli
  • wyrażenia lambda (zaawansowane)
  • inne

Jak można odwrócić elementy w tablicy/kolekcji? w tym kontekście chodzi o odwrócenie kolejności (a nie odwrotne sortowanie)

Za pomocą np. metody Array.Reverse.

Przykład:

            string[] k = new string[5];
            k[0] = "UUU";
            k[1] = "ZZZ";
            Array.Reverse(k);

Jak można usuwać elementy z tablic/kolekcji? czy można pierwszy, ostatni lub jakiś ze środka?

Wprost nie ma mechanizmu na usuwanie elementów. Możemy zmienić rozmiar (w sposób opisany wcześniej), wtedy zostaną uciętę nadmiarowe elementy. Możemy przenieść wybrane elementy do pomocniczej tablicy i potem przypisać wartość zmiennej tablicowej.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment