2012-03-29 2 views
1

많은 수의 사용자 지정 레코드를 저장 한 다음 레코드 인스턴스를 찾을 수있는 적절한 .NET 클래스를 찾고 있습니다. 보다 구체적으로, 레코드 클래스는 3 개의 속성을 가지고 있으며 그 중 하나를 사용하여 인스턴스를 찾습니다. 저장할 인스턴스 수는 최대 100.000입니다. 나는 정의와 함께 사용 HastSetOf (데 MyRecord>에 대해 알고빠른 검색을 허용하는 .NET 클래스

는 IEqualityComarer. propblem은 조회 작업에 난 단지 기록의 소품 중 하나 알 다른 2 소품 값을 필요로 실제로 것입니다.

내가 필요할까요

DictionaryOf (문자열, 기록) 또는이 빠른 하나

가 사전에 감사

답변

1

를 사용하여 사전 수업이 경우, 당신은 세 가지 사전이 필요합니다?!. 하나를 각 속성에 대한 당신 ' 속성에 고유하지 않은 경우 대신 조회를 사용하는 것이 좋습니다.

var entriesById = entries.ToDictionary(e => e.Id); 
var entriesByCategoryId = entries.ToLookup(e => e.CategoryId); 

Console.WriteLine(entriesById[42].ToString()); 
foreach(var entry in entriesByCategoryId[13]) 
{ 
    Console.WriteLine(entry.ToString()); 
} 
0

쉽게 (그리고 아마 대부분의 메모리 효율적인) 방법은 문제의 속성을 기준으로 레코드를 위로 3 개 별도의 해시 테이블 (Dictionary) (각 속성에 페어링 하나)의 레코드를 저장하고 보는 것입니다

또 다른 방법은 맵의 키로 3- 튜플을 사용하고 (주어진 세 가지 속성으로 채워진) 3 가지 튜플의 적절한 요소 만 고려한 사용자 지정 비교기를 사용하는 것입니다. 조회를 위해

3 가지 속성 사이에서 주문할 수있는 경우 (예 : 어휘 순서)를 사용하면 정렬 된 맵에 레코드를 저장하고 이진 검색을 수행 할 수 있습니다 (원하는 요소를 찾기 위해 모든 요소의 선형 쿼리보다 더 효율적입니다)

EDIT : 주석 뒤에 설명을 위해 특정 클래스 이름을 추가했습니다.

+0

.NET에 연결하려면 : 사전은 .NET Framework 용 표준 해시 테이블 구현입니다. – StriplingWarrior

관련 문제