키/값 컬렉션에서 목록을 사용하는 가장 좋은 방법?
-
03-07-2019 - |
문제
키/값 상황에서 컬렉션 객체 (예에서 목록)를 유지하는 가장 좋은 방법은 무엇입니까?
이것이 유일한 옵션입니까 아니면 .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 그러한 다문화가 있습니다.