Typ generyczny ArrayList

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2873 razy

Typ generyczny ArrayList jest kontenerem obiektów typu Object, a ponieważ tak się składa, że wszystko w C# dziedziczy po tejże klasie, więc ten kontener może przechowywać wszystkie typy danych.

Tworzenie kontenera i dodawanie do niego elementów

A więc utwórzmy sobie taki przykładowy obiekt tegoż kontenera:

var myArray = new ArrayList(); myArray.Add("jakiś tam tekst"); // dodawanie tekstu myArray.Add(10); // dodawanie liczby typu int myArray.Add(10.5); // dodawanie liczby typu double foreach (Object i in myArray) // iterowanie po elementach tablicy { Console.WriteLine(i.ToString()); // wypisywanie danych }

Aby powyższy kod mógł się wykonać trzeba jeszcze użyć następującej przestrzeni nazw:

using System.Collections;

Wynik powyższego kodu:

jakiś tam tekst
10
10.5

Można dodawać elementy dowolnych iterowalnych obiektów:

var myArray = new ArrayList(); int[] t = {1, 2, 3, 4, 5}; myArray.AddRange(t); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
2
3
4
5

Wstawianie elementów do kontenera

Za pomocą metody Insert można pod podanym indeksem dodać nową wartość:

var myArray = new ArrayList(); int[] t = {1, 2, 3, 4, 5}; myArray.AddRange(t); myArray.Insert(2, 10); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
2
10
3
4
5

Można dodać dowolny zakres danych zawartych w jakimś iterowalnym elemencie za pomocą metody InsertRange:

var myArray = new ArrayList(); int[] t = {1, 2, 3, 4, 5}; myArray.AddRange(t); myArray.InsertRange(2, t); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
2
1
2
3
4
5
3
4
5

Usuwanie elementów z kontenera

Do usunięcia danego elementu z obiektu kontenera ArrayList służy metoda Remove, która usuwa pierwszy element, który odpowiada podanej wartości. Oto przykład:

var myArray = new ArrayList(); int[] t = {1, 2, 2, 3, 4, 5}; myArray.AddRange(t); myArray.Remove(2); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
2
3
4
5

Istnieje też metoda RemoveAt, która usuwa podany indeks kontenera:

var myArray = new ArrayList(); int[] t = {1, 2, 2, 3, 4, 5}; myArray.AddRange(t); myArray.RemoveAt(1); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
2
3
4
5

Na koniec metoda RemoveRange, która umożliwia usunięcie pewnego zakresu danych z kontenera:

var myArray = new ArrayList(); int[] t = {1, 2, 2, 3, 4, 5}; myArray.AddRange(t); myArray.RemoveRange(1, 3); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
5

Odwracanie kolejności ułożenia elementów w kontenerze

Za pomocą metody Reverse umożliwia odwrócenie kolejności występowania elementów danego kontenera:

int[] t = {1, 2, 3, 4, 5}; var myArray = new ArrayList(); myArray.AddRange(t); myArray.Reverse(); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

5
4
3
2
1

Sortowanie elementów

Metoda Sort umożliwia sortowanie elementów, pod warunkiem że te są tego samego typu i dziedziczą po IComparable. Oto przykład działania:

int[] t = {2, 4, 3, 1, 5}; var myArray = new ArrayList(); myArray.AddRange(t); myArray.Reverse(); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Wynik działania:

1
2
3
4
5

Sprawdzanie, czy dany element znajduje się na liście

Metoda Contains umożliwia sprawdzenie, czy dany element znajduje się na liście. Oto przykład działania:

int[] t = {2, 4, 3, 1, 5}; var myArray = new ArrayList(); myArray.AddRange(t); if(myArray.Contains(4)) { Console.WriteLine("Tak, element 4 znajduje się na liście"); }

Wynik działania:

Tak, element 4 znajduje się na liście

Usuwanie wszystkich elementów kontenera

Metoda Celar czyści zawartość kontenera:

int[] t = {2, 4, 3, 1, 5}; var myArray = new ArrayList(); myArray.AddRange(t); myArray.Clear(); foreach (Object i in myArray) { Console.WriteLine(i.ToString()); }

Powyższy kod nie wyświetli ani jednego elementu kontenera myArray, ponieważ ten takowych nie posiada.

Tworzenie kopii kontenera w postaci tablicy

Metoda ToArray pozwala na utworzenie kopii elementów zawartych w kontenerze do tablicy obiektów typu Object. Oto przykład działania:

int[] t = {2, 4, 3, 1, 5}; var myArray = new ArrayList(); myArray.AddRange(t); object[] tObj = myArray.ToArray();

Możliwe jest również określenie typu, jaki będzie tablica docelowa miała:

int[] arr = (int[])myArray.ToArray(typeof(int));

Jednakże tutaj trzeba mieć na uwadze, że kontener może zawierać różne typy obiektów, jeżeli tak jest i użyty zostanie tenże sposób, to dojdzie do błędu w programie.

Indeksowanie i właściwość Length:

Do poszczególnych elementów kontenera można się odwoływać tak, jak do elementów tablicy:

int[] t = {2, 4, 3, 1, 5}; var myArray = new ArrayList(); myArray.AddRange(t); myArray[0] = 10;

Z kolei właściwość Length umożliwia uzyskanie informacji o liczbie elementów znajdujących się w kontenerze.

Propozycje książek