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.