c# collections namevaluecollection

C#Iterate a través de NameValueCollection



collections (6)

Creo que esto es más simple:

For i As Integer = 0 To nvc.Count - 1 Console.Write("No", "Key", "Value") Console.Write(i, nvc.GetKey(i), nvc.Get(i)) Next

Tengo una NameValueCollection y quiero NameValueCollection los valores. Actualmente, estoy haciendo esto, pero parece que debería haber una manera más ordenada de hacerlo:

NameValueCollection nvc = new NameValueCollection(); nvc.Add("Test", "Val1"); nvc.Add("Test2", "Val1"); nvc.Add("Test2", "Val1"); nvc.Add("Test2", "Val2"); nvc.Add("Test3", "Val1"); nvc.Add("Test4", "Val4"); foreach (string s in nvc) foreach (string v in nvc.GetValues(s)) Console.WriteLine("{0} {1}", s, v); Console.ReadLine();

¿Esta ahí?


La única forma que encontré para evitar los bucles anidados es usar una lista adicional para almacenar los valores:

List<string> arrValues = new List<string>(); for (int i = 0; i < nvc.Count; i++) arrValues.AddRange(nvc.GetValues(i)); foreach (string value in arrValues) Console.WriteLine(value);

(Requiere [solo] .NET 2.0 o posterior)


No hay nada nuevo que ver aquí (@ Julian''s + 1d por mi respuesta es funcionalmente equivalente), se mueven todos ustedes por favor.

Tengo un conjunto de métodos de extensión [excesivo para este caso pero posiblemente relevante] en una respuesta a una pregunta relacionada , que le permitiría hacer:

foreach ( KeyValuePair<string,string> item in nvc.AsEnumerable().AsKeyValuePairs() ) Console.WriteLine("{0} {1}", item.key, item.value);


Puede aplanar la colección con Linq, pero sigue siendo un ciclo foreach pero ahora más implícito.

var items = nvc.AllKeys.SelectMany(nvc.GetValues, (k, v) => new {key = k, value = v}); foreach (var item in items) Console.WriteLine("{0} {1}", item.key, item.value);

La primera línea convierte la colección anidada en una colección (no anidada) de objetos anónimos con las propiedades clave y valor .

Se aplana en la forma en que ahora es una clave de mapeo -> valor en lugar de clave -> colección de valores . Los datos de ejemplo:

Antes de:

Prueba -> [Val],

Test2 -> [Val1, Val1, Val2],

Test3 -> [Val1],

Test4 -> [Val4]

Después:

Prueba -> Val,

Test2 -> Val1,

Test2 -> Val1,

Test2 -> Val2,

Test3 -> Val1,

Test4 -> Val4


Puede usar la clave para buscar en lugar de tener dos bucles:

foreach (string key in nvc) { Console.WriteLine("{0} {1}", key, nvc[key]); }


foreach ( string key in nvc.Keys ) Console.WriteLine("{0} {1}", key, nvc[key]);

Esto le devolverá todas las claves y los valores correspondientes.