1. ホーム
  2. c#

C# NameValueCollectionを繰り返し処理する

2023-09-04 11:36:03

質問

私は 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();

ありますか?

どのように解決するのですか?

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);

最初の行は、ネストされたコレクションを、プロパティを持つ匿名オブジェクトの(ネストされていない)コレクションに変換します。 キー .

という形でフラット化され、マッピングである キー -> 値 の代わりに キー -> 値のコレクション . 例のデータです。

前です。

テスト -> [Val]です。

Test2 -> [Val1、Val1、Val2]とします。

テスト3 -> [Val1]です。

テスト4 -> [Val4]です。

後です。

<ブロッククオート

テスト -> バル。

Test2 -> Val1です。

Test2 -> Val1,

Test2 -> Val2です。

テスト3 -> Val1です。

テスト4 -> Val4