.NET 기본 클래스 라이브러리에 중복 키를 사용할 수있는 사전 클래스가 있습니까? 내가 찾은 유일한 해결책은 예를 들어 다음과 같은 클래스를 만드는 것입니다.
Dictionary<string, List<object>>
그러나 이것은 실제로 사용하는 데 매우 자극적입니다. Java에서는 MultiMap 이이 작업을 수행하지만 .NET에서 아날로그를 찾을 수 없다고 생각합니다.
답변
.NET 3.5를 사용하는 경우 Lookup
클래스를 .
편집 : 당신은 일반적으로 사용 Lookup
하여Enumerable.ToLookup
. 이것은 나중에 변경하지 않아도된다고 가정하지만 일반적으로 충분합니다.
그 경우 하지 않는 당신을 위해 일을, 내가 도움이 될 것입니다 프레임 워크에서 아무것도 생각하지 않습니다 – 그리고 사전을 사용하는 것이 좋은가수록 같다가 🙁
답변
List 클래스는 실제로 컬렉션을 반복하려는 중복이 포함 된 키 / 값 컬렉션에 매우 효과적입니다. 예:
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
// add some values to the collection here
for (int i = 0; i < list.Count; i++)
{
Print(list[i].Key, list[i].Value);
}
답변
List <KeyValuePair <string, string>>로이를 수행하는 한 가지 방법이 있습니다.
public class ListWithDuplicates : List<KeyValuePair<string, string>>
{
public void Add(string key, string value)
{
var element = new KeyValuePair<string, string>(key, value);
this.Add(element);
}
}
var list = new ListWithDuplicates();
list.Add("k1", "v1");
list.Add("k1", "v2");
list.Add("k1", "v3");
foreach(var item in list)
{
string x = string.format("{0}={1}, ", item.Key, item.Value);
}
출력 k1 = v1, k1 = v2, k1 = v3
답변
문자열을 키와 값으로 사용하는 경우 System.Collections.Specialized.NameValueCollection 을 사용 하면 GetValues (string key) 메서드를 통해 문자열 값 배열을 반환합니다.
답변
나는 방금 MultiDictionary라는 클래스를 포함 하는 PowerCollections 라이브러리를 발견했습니다. 이것은 이런 유형의 기능을 깔끔하게 마무리합니다.
답변
조회 사용에 관한 매우 중요한 참고 사항 :
구현하는 객체를 Lookup(TKey, TElement)
호출 하여의 인스턴스를 만들 수 있습니다ToLookup
IEnumerable(T)
의 새 인스턴스를 생성하는 공개 생성자가 없습니다 Lookup(TKey, TElement)
. 또한 Lookup(TKey, TElement)
개체는 변경할 수 없습니다. 즉 , 개체 나 키를 Lookup(TKey, TElement)
만든 후에 는 개체 나 키를 추가하거나 제거 할 수 없습니다 .
나는 이것이 대부분의 사용을위한 쇼 스토퍼가 될 것이라고 생각합니다.
답변
나는 List<KeyValuePair<object, object>>
욥 과 같은 일을 할 것이라고 생각합니다.