2017-01-04 4 views
0

나는 다음과 같은 항목이 예를 들어, 키 - 값 쌍의 정렬 된 세트를 가지고 : 나는 빠른 조회를하고 싶은A는 사전 정렬 된 다음 키

1 "one" 
2 "two" 
4 "four" 
50 "fifty" 

(그래서 int 키가 주어진다면, 그 키의 값을 찾고 싶습니다.) 또한, 현재 키에서 사전의 다음 키를 찾는 빠른 방법을 가지고 있습니다 - 따라서 2 키가 있으면 다음 키가 4, 그 다음 50.

저는 사전이 첫 번째 부분을 빠르게 처리하고 두 번째 부분의 링크드 목록과 같은 것을 알고 있습니다 (그러나 특정 키에서 시작하려면 '들어가기'어렵습니다).

나는 모양이 here이었습니다. 그리고이 중 일부는 정렬 된 사전으로 가능할 수도 있습니다. 나는 C#에서 이러한 것들을 모두 수행하는 좋은 데이터 구조가 있는지 궁금해했다. (키에 의한 검색과 다음 키로 이동)?

매우 큰 항목 (수천 개)이 필요하지는 않지만 가능한 많은 수의 조회를 수행하고 신속하게 키 사이를 이동하려고합니다 (5 번, 6, 7 ...이 사전에 있음).

+2

사전에 이미 키 모음이 있습니다. http://stackoverflow.com/questions/4720674/how-do-i-get-previous-key-from-sorteddictionary – Florian

+0

사전에 이미 키 모음이 있습니다. 키를 반복하면됩니다. 'foreach (dict.Keys의 var 키)' –

+0

SortedDictionary 나 SortedList와 같은 단일 데이터 유형이 도움이되지 않으면 두 개의 개별 구조에 데이터를 저장하는 것이 가장 좋을 수 있으며 최적 병법. 이것은 최신 정보를 유지하는 데 드는 비용을 증가시킵니다. @ M.kazemAkhgary 그는 전체 수집 루프를 수행하는 것보다 단지'int 2'를 사용하여 함수를 입력하는 것을 최적화하는 것을 의미한다고 생각합니다. – Katana314

답변

1

당신이 찾고있는 무슨은 당신이 키를 얻을 수있는이 컬렉션에서

System.Collections.Specialized

에서 OrderedDictionary, 당신은 이미 하나를 발견하는 옆에 다음 인덱스 항목을 취할 수 있지만, 상자 구현 중 Microsoft의 TryGetValue 나 IndexOf와 같은 메소드가 모두 필요하기 때문에 Microsoft는 작동하지 않습니다. 당신은 당신의 가치있는 정보를 넣을 수

MSDN

Custom ordered dictionary

0

:

해당 페이지에서 찾아 보게 그것은 얻기 위해 다음 사소한

public class MyValue 
{ 
    string Value; 
    int NextId; 
    int PreviousId; 
} 

public Dictionary<int, MyValue>(); 

를 이전 또는 다음 신분증. 그 다음 또는 이전 값을 얻는 것은 간단합니다.

물론 삽입 논리를 사용하면 추가 할 때마다 이전에 & 번을 업데이트해야합니다.

+0

다음 및 이전 ID에'int? '를 사용하는 것이 더 낫습니다. 그 이유는 그것이 끝나는 곳을 알기 때문입니다. 다른 현명한 '0'은 다른 이드에 의해 착각 될 수 있습니다. –