2012-04-20 27 views
34

No tengo mucha experiencia con C#, y me utilizan PHP con matrices asociativas.¿Cuál es la forma más fácil de manejar una matriz asociativa en C#?

Veo que en C# está la clase List y la matriz en bruto, pero me gustaría asociar algunas claves de cadena en algún momento.

¿Cuál es la forma más fácil de manejar esto?

Thx!

+5

@Servy: Just to nitpick en algunos terminología, ** no **, eso es ** array asociativo **. Radu es correcto. http://en.wikipedia.org/wiki/Associative_array. Además, hay numerosos lenguajes en los que las matrices no están indexadas por números; JavaScript es uno. Y mientras criticamos la terminología: no es necesario implementar una ** matriz asociativa ** como ** tabla hash **. Está confundiendo un * tipo de datos abstracto * con sus * detalles de implementación *. Una matriz asociativa podría implementarse mediante un árbol binario equilibrado, por ejemplo. –

+0

Gracias por la aclaración Eric. – Servy

Respuesta

61

Usa la clase de diccionario. Debe hacer lo que necesita. La referencia es here.

Así que usted puede hacer algo como esto:

IDictionary<string, int> dict = new Dictionary<string, int>(); 
dict["red"] = 10; 
dict["blue"] = 20; 
+2

Comprenda que un diccionario no permite la indexación lineal (a menos que así sea como lo hizo), por lo que en el ejemplo anterior, 'dict [0]' (un intento de obtener el primer elemento del Diccionario) no se compilará. Puede solucionar esto de varias maneras; lo más fácil es usar Linq para enumerar a través de los objetos KeyValuePair del Diccionario uno a la vez. Sin embargo, el pedido no está garantizado (o al menos solo está garantizado en virtud de un detalle de implementación). – KeithS

+9

@KeithS Sin embargo, existe un [OrderedDictionary] (http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx) si esa es una funcionalidad requerida. – Servy

+1

¡Totalmente correcto y funcionando! –

12

Un diccionario va a funcionar, pero tiene .NET matrices asociativas integradas en un caso es la clase NameValueCollection (System.Collections.Specialized.NameValueCollection)..

Una ligera ventaja sobre el diccionario es que si intenta leer una clave inexistente, devuelve null en lugar de arrojar una excepción. A continuación hay dos maneras de establecer valores.

NameValueCollection list = new NameValueCollection(); 
list["key1"] = "value1"; 

NameValueCollection list2 = new NameValueCollection() 
{ 
    { "key1", "value1" }, 
    { "key2", "value2" } 
}; 
Cuestiones relacionadas