NameValueCollection을 통해 C # 반복
나는이 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,
Test2-> Val1,
Test2-> Val1,
Test2-> Val2,
Test3-> Val1,
테스트 4-> Val4
두 개의 루프 대신 조회에 키를 사용할 수 있습니다.
foreach (string key in nvc)
{
Console.WriteLine("{0} {1}", key, nvc[key]);
}
여기에서 볼 새로운 것은 없습니다 (@Julian의 + 1'd by me 대답은 기능적으로 동일합니다). 모두 함께 이동하십시오.
관련 질문에 대한 답변에 [이 경우 과도하지만 관련성이있을 수있는] 확장 메서드 집합이 있습니다. 이렇게하면 다음 작업을 수행 할 수 있습니다.
foreach ( KeyValuePair<string,string> item in nvc.AsEnumerable().AsKeyValuePairs() )
Console.WriteLine("{0} {1}", item.key, item.value);
중첩 루프를 피하는 유일한 방법은 추가 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);
([전용] .NET 2.0 이상 필요)
나는 이것이 더 간단하다고 생각합니다.
For i As Integer = 0 To nvc.Count - 1
Console.Write("No", "Key", "Value")
Console.Write(i, nvc.GetKey(i), nvc.Get(i))
Next
var enu = myNameValueCollection.GetEnumerator();
while (enu.MoveNext())
{
string key = (string)enu.Current;
string value = myNameValueCollection[key];
}
또는 키가 nullable 인 경우 :
for (int i = 0; i < myNameValueCollection.Count; i++)
{
string key = myNameValueCollection.GetKey(i);
string value = myNameValueCollection.Get(i);
}
foreach ( string key in nvc.Keys )
Console.WriteLine("{0} {1}", key, nvc[key]);
그러면 모든 키와 해당 값이 반환됩니다.
참고 URL : https://stackoverflow.com/questions/5065928/c-sharp-iterate-through-namevaluecollection
'Development Tip' 카테고리의 다른 글
Visual Studio에서 명명 규칙 위반 메시지를 제거하는 방법은 무엇입니까? (0) | 2020.10.28 |
---|---|
Ruby에서 "콜백"을 구현하는 방법은 무엇입니까? (0) | 2020.10.28 |
판다 집계 수 구별 (0) | 2020.10.28 |
Java에서 오토 박싱과 언 박싱을 사용하는 이유는 무엇입니까? (0) | 2020.10.28 |
Pycharm 및 sys.argv 인수 (0) | 2020.10.28 |