Typ generyczny ArrayList
Stronę tą wyświetlono już: 384 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.