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.