나는 Thing
의 숫자가 값 유형 인 T1 f1
과 T2 f2
의 두 변수의 조합을 찾아서 자주 검색 할 필요가있는 List<Thing> things
을 가지고 있습니다. 내가 지금하는 방식은 단순히 things.Where(t => t.Field1 == f1 && t.Field2 == f2)
입니다. 그러나, 나는 그 조회의 수시로 극단적으로 많은 것을하고, 효과적인 방법을 필요로한다.중복 된 다차원 키를 지원하는 사전?
다행히도 things
에는 요소가 제거되거나 추가 될 필요가 없으므로 작성시 목록을 구문 분석하고 Dictionary<T1, Lookup<T2, Thing>>
에 추가 할 것을 고려했습니다. 그러나 이것은 특히 구문 분석을 추가 할 때 지저분 해집니다. 그리고 더 많은 밭을 찾아야한다면 정말 털이 나옵니다. 세 개의 입력란은 Dictionary<T1, Dictionary<T2, Lookup<T3, Thing>>>
과 같습니다.
내 생각은 Lookup<Tuple<T1,T2,T3,...>,Thing>
입니다. 그러나이 경우 Tuple이 참조 유형이기 때문에 키가 실제로 작동하는지 확신 할 수 없습니다.
Lookup<ValueType<T1,T2,T3,...>,Thing> things
을 만들더라도 lookup 문은 things[new ValueType<T1,T2,T3,...>(f1, f2, f3, ...)]
과 비슷할 것입니다. 꽤 못생긴 것입니다. (여전히 그 키를 신뢰할 수 있는지 확실하지 않습니다.)
해시 테이블의 성능 이점을 유지하는 더 세련된 솔루션이 있습니까? IEnumerable<Thing> found = things[f1, f2, f3, ...];
과 같이 간단하게 입력 할 수 있습니다.
메모리 데이터베이스에서 SQLite와 같은 것을 사용 해본 적이 있습니까? – CodingGorilla
'존재하는 것'에 ID가 있는지 (ID, PrimaryKey 또는 기타)? –
[C# 다중 키 일반 사전] (http://www.codeproject.com/Articles/32894/C-Multi-key-Generic-Dictionary) –