Ver Mensaje Individual
  #23 (permalink)  
Antiguo 10/07/2014, 10:51
alexg88
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Crear una clase dinámicamente

Buenas,

Pues me temo que el Dictionary si hace comparación de cadenas. Cualquier estructura basada en tablas hash tiene que comparar el elemento que se busca.

El proceso es tal que así:

1. Con la clave (en tu caso un string) se obtiene el hash (una posición)
2. Si se encuentra un elemento con ese hash, se debe comparar la clave del elemento encontrado con la clave de búsqueda, y si son iguales, se devuelve el elemento. En caso contrario, hay que hacer una búsqueda en el espacio de colisiones.

El espacio de colisiones es el lugar donde están aquellas claves que tiene hash duplicados. Por ejemplo, la cadena "Hola" y "Adios" podrían devolver el mismo hash (según como se calcule), aunque no utilizando la función hash por defecto que implementa .NET para las cadenas. Pero en cualquier caso, la comparación es inevitable.

Para que veas que no miento, esta es la implementación de la búsqueda de la clave en un Dictionary:

Código C#:
Ver original
  1. private int FindEntry(TKey key)
  2. {
  3.     if (key == null)
  4.     {
  5.         ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
  6.     }
  7.     if (this.buckets != null)
  8.     {
  9.         int num = this.comparer.GetHashCode(key) & 2147483647;
  10.         for (int i = this.buckets[num % this.buckets.Length]; i >= 0; i = this.entries[i].next)
  11.         {
  12.             if (this.entries[i].hashCode == num && this.comparer.Equals(this.entries[i].key, key))
  13.             {
  14.                 return i;
  15.             }
  16.         }
  17.     }
  18.     return -1;
  19. }

Como verás se hace un equals para comparar el valor de la clave y el encontrado.
Un saludo.