2009-09-09 2 views
2

인덱스로 액세스되는 my sortedDictionary의 요소 값을 설정해야합니다.SortedDictionary의 i 번째 값 설정

e.e.

sortedDictionary.Values[index] = value; // compile error 

다음은 색인이 아닌 키를 통해 액세스하기 때문에 다음과 같습니다.

sortedDictionary[index] = value; // incorrect 

나는 다음과 같은 해결책을 생각해 냈지만 직관력은 느리다는 것을 알게되었습니다. 나는 열쇠에 의한 접근이 O (log N)이고, 색인에 의한 접근이 O (1)라고 가정하고 있지만 확실하지는 않습니다.

sortedDictionary[sortedDictionary.ElementAt(index).Key] = value; 

일부 배경 : 나는 빠른 삽입을 필요로하기 때문에 내가 SortedDictionary를 사용하고

은 삭제 조회 및 이웃 요소에 액세스 할 수 있도록. (즉, 다음 또는 가장 낮은 다음). 효율성이 중요합니다.

+2

ElementAt (인덱스)는 열거 형의 확장 메서드입니다. SortedDictionary는 IList 인터페이스를 구현하지 않으므로 O (n) 시간에 작동합니다. – maciejkow

+0

기본 제공 .NET 구조 중 아무 것도 필요로하지 않는 것처럼 보입니다. 나는 건너 뛰기 목록으로 갈지도 모른다. – abtree

답변

2

약간의 트레이드 오프입니다.

SortedList를 사용하면 더 빨리 색인을 조회 할 수 있지만 삽입 속도는 저하됩니다.

MSDN 인용하자면 :

을 ... SortedDictionary<(Of <(TKey, TValue>)>)SortedList<(Of <(TKey, TValue>)>) 클래스 간의 또 다른 차이점은 SortedList<(Of <(TKey, TValue>)>) 는 키와에 의해 반환 된 컬렉션을 통해 키와 값의 효율적인 색인 검색 를 지원한다는 것입니다 값 특성. 목록이 키 및 값의 내부 배열에 대한 래퍼 일 뿐이므로 속성에 액세스 할 때 목록을 다시 생성 할 필요가 없습니다.

모두 SortedDictionary

SortedListIDictionary을 구현, 그래서 함께 테스트 데이터 및 코드 프로파일 러를 얻고 둘을 시도 할 것입니다.

둘 다 빠르지 않은 경우 Dictionary (빠른 삽입, 업데이트 및 키 조회)을 사용하고 수동으로 두 번째 데이터 구조에서 색인을 유지 관리해야 할 수도 있습니다.