[C#] .NET 사전에 중복 키가 있습니까?

.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)호출 하여의 인스턴스를 만들 수 있습니다ToLookupIEnumerable(T)

의 새 인스턴스를 생성하는 공개 생성자가 없습니다 Lookup(TKey, TElement). 또한 Lookup(TKey, TElement)개체는 변경할 수 없습니다. 즉 , 개체 나 키를 Lookup(TKey, TElement)만든 후에 는 개체 나 키를 추가하거나 제거 할 수 없습니다 .

(MSDN에서)

나는 이것이 대부분의 사용을위한 쇼 스토퍼가 될 것이라고 생각합니다.


답변

나는 List<KeyValuePair<object, object>>욥 과 같은 일을 할 것이라고 생각합니다.