C# итерация через NameValueCollection
у меня есть NameValueCollection
, и хотите перебрать значения. В настоящее время я делаю это, но кажется, что должен быть более аккуратный способ сделать это:
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();
есть?
6 ответов:
вы можете сгладить коллекцию с помощью Linq, но это все равно
foreach
цикл, но теперь более неявный.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);
первая строка преобразует вложенную коллекцию в (не вложенную) коллекцию анонимных объектов со свойствами ключ и стоимостью.
Он сглажен таким образом, что теперь это отображение ключ -> значение вместо ключ -> набор значений. Пример данных:
перед:
Test - > [Val],
Test2 - > [Val1, Val1, Val2],
Test3 -> [Val1],
Test4 -> [Val4]
после:
вы можете использовать ключ для поиска вместо того, чтобы иметь два цикла:
foreach (string key in nvc) { Console.WriteLine("{0} {1}", key, nvc[key]); }
ничего нового, чтобы увидеть здесь (@Julian's +1'd by me ответ функционально эквивалентен), вы все двигаетесь вперед, пожалуйста.
У меня есть [излишек для этого случая, но, возможно, релевантный] набор методов расширения в ответ на соответствующий вопрос, что позволит вам сделать:
foreach ( KeyValuePair<string,string> item in nvc.AsEnumerable().AsKeyValuePairs() ) Console.WriteLine("{0} {1}", item.key, item.value);
единственный способ избежать вложенных циклов-это использовать дополнительный список для хранения значений:
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);
(требуется [только] .NET 2.0 или более поздней версии)