Angella Andrea - Italian Blog

Infinita passione per lo sviluppo software !
posts - 133, comments - 216, trackbacks - 9

My Links

News

MIT OpenCourseWare: I'm invested Wikipedia Affiliate Button


Sto leggendo:

Archives

Post Categories

Siti web realizzati

Siti web tecnici

[70-536] - ArrayList class and collection interfaces


Area di riferimento

- Developing applications that use system types and collections
    - Manage a group of associated data in a .NET Framework application by using collections. (Refer System.Collections namespace)
        - ArrayList class
        - Collection interfaces
             - ICollection interface and IList interface
             - IEnumerable interface and IEnumerator interface
             - IComparer interface and IEqualityComparer interface
        - Iterators



ArrayList class

La classe ArrayList permette di creare una collezione di oggetti che possono essere ottenuti sulla base di un indice.

Per inserire elementi in una lista è possibile utilizzare le funzioni Add e AddRange e Insert:

ArrayList lista1 = new ArrayList();
lista1.Add(1);  
// aggiunge il numero 1 alla lista
lista1.Add(2);
lista1.Add(3);

ArrayList lista2 = new ArrayList();
lista2.AddRange(lista1);
   // aggiunge alla lista2 il contenuto della lista1
lista2.Add(4);
lista2.Add(5);
lista2.Insert(0, 10);
      // inserisce il numero 10 in posizione 0


Per rimuovere elementi dalla lista si utilizzano i metodi Clear, Remove, RemoveAt:

lista.Remove(10);    // Rimuove l'elemento 10 dalla lista
lista.RemoveAt(1);   // Rimuove l'elemento in posizione 1 dalla lista
lista.Clear();
       // Rimuove tutti gli elementi dalla lista


Per accedere agli elementi della lista si utilizza l'indexer:

int val = lista[2];  // ottiene l'elemendo della lista in posizione 2


Per sapere se un certo elemento è presente nella lista si utilizza il metodo Contains, per conoscere anche la sua posizione si utilizza il metodo IndexOf

if (lista.Contains(3) == true)
{
    Console.WriteLine("lista contiene il numero 3");
}

Console.WriteLine("L'elemento {0} si trova in posizione {1}", 4, lista.IndexOf(4));


Alcuni dei metodi visti sono comuni a tutte le liste e sono definiti nell'interfaccia IList così definita:

[ComVisible(true)]
public interface IList : ICollection, IEnumerable
{
    // Methods
    int Add(object value);
    void Clear();
    bool Contains(object value);
    int IndexOf(object value);
    void Insert(int index, object value);
    void Remove(object value);
    void RemoveAt(int index);

    // Properties
    bool IsFixedSize { get; }
    bool IsReadOnly { get; }
    object this[int index] { get; set; }
}


Per scorrere tutti gli elementi di una lista con la possibilità di modificarli:

for (int i = 0; i < lista.Count; i++)
{
    lista[i] = (int) lista[i] * 2;     // moltiplico per 2 tutti gli elementi della lista
}


Nel caso in cui non si desidera modificare gli elementi della lista, siccome ArrayList implementa l'interfaccia IEnumerable è possibile utilizzare il costrutto foreach:

foreach (int num in lista)
{
    Console.WriteLine(num);  
}


che è perfettamente equivalente al seguente codice meno leggibile:

IEnumerator enumerator = lista.GetEnumerator();
while ( enumerator.MoveNext() )
{
    Console.WriteLine(enumerator.Current);
}


Le interfacce IEnumerable e IEnumerator permettono in un certo modo di implementare il design pattern Iterator che fornisce un modo per accedere agli elementi di un oggetto aggregato mantenendo un'interfaccia generica. Ciò permette di realizzare una funzione generica per la stampa degli elementi di una qualsiasi lista.

public static void stampa(IList lista)
{
    Console.WriteLine("La lista contiene {0} elementi: ", lista.Count);
    foreach (object item in lista)
    {
        Console.WriteLine(item);
    }
    Console.WriteLine();
}


Per ordinare gli elementi di una lista utilizzando il criterio di default:

lista.Sort();


Se si vuole avere più controllo relativo all'ordinamento allora è opportuno passare al metodo Sort un oggetto che implementa l'interfaccia IComparer e quindi ridefinisce il metodo Compare.

[ComVisible(true)]
public interface IComparer
{
    int Compare(object x, object y);
}


Vediamo un esempio:

class IntComparer : IComparer
{
    public int Compare(object x, object y)
    {
        int a = (int) x;
        int b = (int) y;

        if (a < b) return -1;
        else if (a > b) return 1;

        return 0;
    }
}

[...]

lista.Sort(new IntComparer());
stampa(lista);


L'interfaccia IEqualityComparer permette di aggiungere la possibilità di controllare se due oggetti sono uguali. Di seguito la sua definizione:

[ComVisible(true)]
public interface IEqualityComparer
{
    // Methods
    bool Equals(object x, object y);
    int GetHashCode(object obj);
}

Print | posted on sabato 20 ottobre 2007 22:32 | Filed Under [ Exam 70-536 Application Development Foundation ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET