2012-06-05 9 views
5

que tenía una tabla hash como referencia de sólo lectura a una lista de valores de la siguiente manera:estructura para sostener 3 columnas y de búsqueda de una fila rápida por cualquiera de las columnas

internal static readonly Hashtable relationcodeAcodeB = new Hashtable 
{ 
    {"149", "23"}, 
    {"139", "17"} 
} 

Ahora necesitamos una estructura que puede contener 3 valores (columnas) y buscar un valor rápida por cualquiera de los otros 2.

Algo como esto:

internal static readonly Hashtable relationcodeAcodeBcodeC = new Hashtable 
{ 
    {"149", "23", "xx"}, 
    {"139", "17", "xxx"} 
} 
string codeB=relationcodeAcodeBcodeC[codeA="149"]["codeB"]; 
+0

¿Hay alguna razón por la que no esté utilizando colecciones genéricas? –

+1

Esto es realmente una pregunta bastante interesante (¡voto popular!); obviamente hay varias soluciones para esto, pero tengo curiosidad sobre cuál es la forma más rápida/limpia o incluso correcta de hacer esto. BTW debe aclarar: el título dice por cualquiera de las columnas, mientras que la pregunta se lee por cualquiera de los otros ** dos **. La gran diferencia – pyrocumulus

+0

De acuerdo con la nube: esta podría ser una pregunta interesante si lo aclaras. –

Respuesta

2

Digamos que su objeto tiene tres propiedades CodeA, CodeB y el codec, se mantienen tres lengüetas de hash les, así:

Dictionary<string, MyObj> dictA, dictB, dictC; 

Al crear un nuevo MyObj, se agrega a los tres diccionarios:

dictA[obj.codeA] = obj; 
dictB[obj.codeB] = obj; 
dictC[obj.codeC] = obj; 

Mirando hacia arriba es muy fácil. Su ejemplo se codificará como dictA["149"].codeB

Manténgalo todo ordenado en una gran clase de búsqueda, por supuesto.

+0

¿No parece demasiado complejo para simplemente tener otra columna? esto significaría tener 3 diccionarios diferentes y llenarlos por separado ... – VSP

+0

Depende, ¿quieres que la búsqueda sea eficiente? De esta forma, la búsqueda se realiza en O (1). Y realmente no es tan difícil de implementar. Si solo desea escanear su lista de objetos y encontrar la correcta, terminará con una solución O (N) que es un poco más larga también. – zmbq

+0

Im implementándolo así como una prueba, pero tiene muchas más líneas de código para inicializar que la tabla hash y ya no puede leerse solo ... Parece extraño que este caso no haya sido manejado por un objeto mejor adaptado hasta ahora – VSP

Cuestiones relacionadas