[英]C# Iterate through 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();
在那兒?
您可以使用 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);
第一行,將嵌套集合轉換為具有屬性key和value的匿名對象的(非嵌套)集合。
它現在是一個映射鍵 -> 值而不是鍵 -> 值集合。 示例數據:
前:
測試 -> [Val],
測試 2 -> [Val1, Val1, Val2],
測試 3 -> [Val1],
測試 4 -> [Val4]
后:
測試 -> Val,
測試 2 -> Val1,
測試 2 -> Val1,
測試 2 -> Val2,
測試 3 -> Val1,
測試 4 -> Val4
您可以使用鍵進行查找,而不是有兩個循環:
foreach (string key in nvc)
{
Console.WriteLine("{0} {1}", key, nvc[key]);
}
這里沒有什么新東西(@Julian 的 +1 由我回答在功能上是等效的),請大家繼續前進。
在相關問題的答案中,我有一個 [overkill for this case but possible related ] 擴展方法集,它可以讓您執行以下操作:
foreach ( KeyValuePair<string,string> item in nvc.AsEnumerable().AsKeyValuePairs() )
Console.WriteLine("{0} {1}", item.key, item.value);
我認為這更簡單:VB.NET
For i As Integer = 0 To nvc.Count - 1
Console.Write("No", "Key", "Value")
Console.Write(i, nvc.GetKey(i), nvc.Get(i))
Next
C#:
for (int i = 0; i <= nvc.Count - 1; i++)
{
Console.Write("No", "Key", "Value");
Console.Write(i, nvc.GetKey(i), nvc.Get(i));
}
我發現避免嵌套循環的唯一方法是使用額外的 List 來存儲值:
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);
(需要 [only] .NET 2.0 或更高版本)
var enu = myNameValueCollection.GetEnumerator();
while (enu.MoveNext())
{
string key = (string)enu.Current;
string value = myNameValueCollection[key];
}
OR 當鍵可以為空時:
for (int i = 0; i < myNameValueCollection.Count; i++)
{
string key = myNameValueCollection.GetKey(i);
string value = myNameValueCollection.Get(i);
}
for (int i = 0; i < nvc.Count; i++) {
System.Console.WriteLine(
nvc.AllKeys[i] + " = " + nvc[i]
);
}
foreach ( string key in nvc.Keys )
Console.WriteLine("{0} {1}", key, nvc[key]);
這將返回您所有的鍵和相應的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.