문제

키/값 상황에서 컬렉션 객체 (예에서 목록)를 유지하는 가장 좋은 방법은 무엇입니까?

이것이 유일한 옵션입니까 아니면 .NET 3.5에 더 나은 솔루션/다른 컬렉션이 있습니까?

var x = new Dictionary<int, List<type>>();
도움이 되었습니까?

해결책

이것은 좋은 해결책이며 상당히 잘 작동합니다. {key = int, value = 4 byte reference}의 사전 객체를 효과적으로 사용하고 있습니다.

키로 값을 검색하면 List<T> 힙에서 사용할 수 있습니다. 이것은 명백한 문제에 대한 매우 효율적이고 컴팩트 한 솔루션이 될 것입니다.

다른 팁

이것이 당신이 필요한 것인지 모르겠지만 나는 그것을 잘게 할 것입니다.

public Dictionary<int,List<T>> myFunction<T>()
{
    var returnvalue = new Dictionary<int,List<T>>();
    //Do some stuff with the collection.
    return returnvalue;
}

그런 다음 전화 할 수 있습니다

public void Main()
{
  var functionreturn = myFunction<String>();
}

이것이 당신에게 도움이 될지 확실하지 않지만 질문을 다시 찾는 데 도움이 될 수 있습니다.

참고 : 위는 에어 코드이며 테스트되지 않았습니다.

프레임 워크 내에는 아무것도 없다고 생각하지만 PowerCollections 라이브러리에는 다단계 컬렉션이 있다고 생각합니다. 당신은 그것을 시도 할 수 있습니다.

나는 당신이 당신의 필요에 따라 래퍼 클래스를 작성해야한다고 생각합니다. 미리 만들어진 목록 사전을 저장해야한다면 Dictionary<int, List<type>> 사유 재산 일뿐 아니라면 괜찮습니다. 공개적으로 너무 많은 정보를 노출시키기 때문에 공개적으로 노출해서는 안되며이를 캐스팅 할 수 없습니다. IDictionary<int, IList<T>> 또는 공분산 부족으로 인해 비슷한 것.

최선의 방법은 다음과 같습니다.

class MyWrapper<T>()
{
    private Dictionary<int, List<T>> dictionary { get; set; }
    public MyWrapper() { dictionary = new Dictionary<int, List<T>>(); }

    // Adds a new item to the collection
    public void Add(int key, T item)
    {
       List<T> list = null;
       if (!dictionary.TryGetValue(key, out list))
       {
          // If dictionary does not contain the key, we need to create a new list
          list = new List<T>();
          dictionary.Add(key, list);
       }
       list.Add(item);
    }

    public IEnumerable<T> this[int key]     
    {
       get
       {
           List<T> list = null;
           // We just return an empty list if the key is not found
           if (!dictionary.TryGetValue(key, out list)) return new List<T>();
           else return list;
       }
    }
}

분명히 귀하의 요구는 다를 수 있습니다. 몇 개의 인터페이스 등을 구현해야 할 수도 있지만 이것이 일반적인 아이디어입니다.

귀하의 ID가 귀하의 유형의 구성원 인 경우 System.Collections.ObjectModel.KeyedCollection<TKey, TItem>

여러 키가 여러 값을 가질 수있는 다중 값 사전, 즉 키 컬렉션을 찾고 있습니까? PowerCollections 그러한 다문화가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top