2011-01-02 5 views
2

stringDateTime의 두 가지 유형을 저장하기위한 모음이 필요합니다.System.Collections 내 시나리오에 가장 적합한 선택

string은 내 컬렉션의 키이어야하며 DateTime은 컬렉션에 삽입하는 시간입니다. FIFO 방식으로 컬렉션에서 항목을 제거하고 싶습니다.

컬렉션은 중복 키를 거부하고 DateTime으로 쿼리 가능해야하므로 주어진 날짜보다 오래된 항목의 수를 원하면 답변 할 수 있습니다.

+0

해시 테이블과 정렬 된 목록을 동시에 사용해보십시오. 추가 할 때 먼저 해시 테이블에 추가하여 중복을 방지 한 다음 시간에 이진 검색을 수행하여 정렬 된 목록에 추가하십시오. 검색 할 때 이진 검색을 수행하고 앞으로/뒤로 계산할 수 있습니다. – wj32

답변

3

최대 효율을 가진 모든 것을 수행하는 기본 내장 C# 데이터 유형은 없습니다. 주로 조회해야 할 두 가지 사항을 지시했습니다.

말했다되고 그건하는 Dictionary<string, DateTime> 당신이 기본적으로 상자 밖으로, 필요한 모든 기능을 제공하는 간단한 솔루션 될 것입니다. 그러나이 콜렉션은 DateTime 조회에 O (n) 복잡성을, O (1)보다 나쁜 제거 시간을 제공합니다. 아마도 큰 문제는 아니지만 실적 요구 사항, 데이터 세트의 예상 크기 또는 가장 자주 발생하는 액세스 유형을 설명하지 않았습니다.

"older than than DateTime"조회 성능과 FIFO 제거 기능을 향상 시키려면 SortedList와 같은 두 번째 인덱스를 유지할 수도 있습니다. 메모리 사용량이 많고 전체 삽입 시간이 다소 느리지 만 DateTime 및 삭제 쿼리가 빠릅니다. "older than than DateTime"의 경우 binary search of the SortedList.Keys을 사용할 수 있습니다.

+0

어떻게 일정 시간 이하의 제거 시간을 가질 수 있습니까?! – Mehrdad

+0

@Lambert : 하, 나는 "O보다 적다 (1)"를 의미하는 것은 "나보다 더 나쁜 (O) (1)"을 의미했지만, 나는 내 정렬 순서를 올바르게 지정하지 않았다고 생각한다. ;) 선명도, 감사를 위해 편집 됨. –

+0

오하이오 하하, 나는 처음에 그것을 얻지 못했습니다! 재미있었습니다. :) – Mehrdad

1

System.Collections.Generic.Dictionary<string, DateTime>은 트릭을해야합니다. 필요에 따라 컬렉션을 처리하는 메소드가 있습니다.

관련 문제