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] - Hashtable


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)
        - Hashtable class
        - DictionaryEntry class
        - IDictionary interface and IDictionaryEnumerator interface
        - IEqualityComparer interface



Hashtable

La classe Hashtable permette di memorizzare coppie chiave/valore cioè una struttura dati di tipo dizionario.
Vediamo che il suo utilizzo è molto semplice:

Hashtable table = new Hashtable();  // creazione di una nuova tabella hash

table.Clear();                      // svuota la tabella hash

table.Add(111111, "Andrea");        // inserisce una nuova coppia chiave/valore
table.Add(222222, "Stefano");
table.Add(333333, "Giorgio");
table.Add(444444, "Vincenzo");

Console.WriteLine("Nomero di entry: {0}", table.Count);                            // 2
Console.WriteLine("Esiste 111111 ? {0}", table.Contains(111111));                  // true
Console.WriteLine("Esiste Alessandro ? {0}", table.ContainsValue("Alessandro"));   // false
Console.WriteLine("La matricola {0} corrisponde a {1}", 111111, table[111111]);    // Andrea

table.Remove(222222);   // Rimuove una coppia chiave valore dalla tabella hash

Console.WriteLine("Esiste 222222 ? {0}", table.ContainsKey(222222));   // Falso perchè è stata rimossa

Console.WriteLine("\nElenco studenti presenti: ");
foreach (int matricola in table.Keys)
{
    Console.WriteLine("\tMatricola {0}: {1}", matricola, table[matricola]);
}

Console.WriteLine("\nElenco studenti presenti: ");
foreach (DictionaryEntry entry in table)
{
    Console.WriteLine("\tMatricola {0}: {1}", entry.Key, entry.Value);
}


Hashtable implementa l'interfaccia ICollection e quindi anche IEnumerator. Ciò consente di utilizzare il costrutto foreach per scorrere i suoi elementi.
Ciascun elemento o entry viene rappresentato mediante la struttura DictionaryEntry così definita:

[Serializable, StructLayout(LayoutKind.Sequential), ComVisible(true)]
public struct DictionaryEntry
{
    private object _key;
    private object _value;
    public DictionaryEntry(object key, object value);
    public object Key { get; set; }
    public object Value { get; set; }
}


La maggior parte dei metodi offerti da Hashtable rappresenta l'implementazione dell'interfaccia IDictionary:

[ComVisible(true)]
public interface IDictionary : ICollection, IEnumerable
{
    // Methods
    void Add(object key, object value);
    void Clear();
    bool Contains(object key);
    IDictionaryEnumerator GetEnumerator();
    void Remove(object key);

    // Properties
    bool IsFixedSize { get; }
    bool IsReadOnly { get; }
    object this[object key] { get; set; }
    ICollection Keys { get; }
    ICollection Values { get; }
}


E' possibile creare una hashtable utilizzando un costruttore che accetta una istanza di un oggetto che implementa l'interfaccia IEqualityComparer. Questo consente di stabilire il criterio mediante il quale stabilire l'uguaglianza tra due oggetti chiave. E' importante definire entrambi i metodi Equals e GetHashCode.

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

Print | posted on sabato 27 ottobre 2007 12:58 | Filed Under [ Exam 70-536 Application Development Foundation ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET