Typ generyczny ArrayList

Stronę tą wyświetlono już: 261 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:

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

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

Listing 2
  1. using System.Collections;

Wynik powyższego kodu:

jakiś tam tekst
10
10.5

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

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

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ść:

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

Wynik działania:

1
2
10
3
4
5

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

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

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:

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

Wynik działania:

1
2
3
4
5

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

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

Wynik działania:

1
2
3
4
5

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

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

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:

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

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:

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

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:

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

Wynik działania:

Tak, element 4 znajduje się na liście

Usuwanie wszystkich elementów kontenera

Metoda Celar czyści zawartość kontenera:

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

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:

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

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

Listing 14
  1. 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:

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

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

Komentarze