2009-06-24 15 views
5

terminamos con esta estructura de datos horrible:Buscando un alterantive a la lista <KeyValuePair <cadena, KeyValuePair <cadena, cadena >>>

List<KeyValuePair<string, KeyValuePair<string, string>>> 

No es probable conseguir enormes (1K < Calculo) y Voy a iterar esta lista una y otra vez.

¿Alguien puede pensar en una mejor alternativa con los tipos incorporados?

+1

Las respuestas a esta pregunta pueden ser útiles http://stackoverflow.com/questions/101825/whats-the- best-way-of-use-a-pair-triple-etc-of-values-as-one-value-in-c –

Respuesta

10

La mejor opción sería envolver su propia clase Tuple, algo así como la de shipping in .NET 4.0.

entonces usted podría tener una sola:

List<Tuple<string,string,string>> 

Esto es bastante fácil de escribir en .NET 2.0 - es básicamente un triplete de valores, en lugar de tener 2 en un KeyValuePair. Sin embargo, no existe un equivalente integrado para un trío de valores en .NET 2.0.


Editar:

Después de leer tu comentario sobre la consulta en otro post, pensé que me gustaría mencionar esto también -

Incluso si usted no tiene valores únicos en key1, se podría acelerar dramáticamente cualquier tipo de consulta/búsqueda mediante:

Dictionary<string, List<KeyValuePair<string,string>>> 

Entonces, en lugar de almacenar un solo KeyValuePair, se podría buscar la lista de ellos a través de la llave en el primer correo lement. Esto sería mucho, mucho más rápido si necesitara encontrar todos los elementos con una primera clave dada ...

+0

me gusta la versión del diccionario - Se me ocurrió algo como eso también (como una especie de grupo de enfoque) - estoy probablemente va a ser la búsqueda de diccionario que muchas veces en esa cadena que es ahora clave – JohnIdol

+0

He hecho esto muchas veces, y tuvo muy pocos problemas. –

10
struct MrStruct 
{ 
    public string Key1, 
    public string Key2, 
    public string Value1 
} 


List<MrStruct>; 

Esto supone que está accediendo a la lista de forma secuencial, tal como lo dijo repetidamente. Potencialmente, otras estructuras de datos podrían ser más rápidas para buscar.

+0

simple y llanamente - Me gusta - ¿funcionaría mejor que lo que he consultado en key1? – JohnIdol

+0

Si key1 es único, podría considerar SortedList ; de lo contrario, podría ordenar su List <> en función de MrStruct.Key1 para el rendimiento. – user7116

+0

¿Qué tipo de consultas estás haciendo? Si Key1 es único, usar un diccionario sería mucho, mucho más rápido ... –

Cuestiones relacionadas