2013-07-10 2 views
0

사전을 사용하여보기에서 선택 상자를 채우고 있습니다. 그것들 모두는 올바르게 작동하고 있습니다. 그러나 사전에 사용자에게 프롬프트로 작용하고 값이 -1 인 추가 옵션을 사전에 추가해야합니다.사전 시작 부분에 항목 삽입

나는 다음과 같은 코드가 ...

Dictionary<int, string> acctMgr = new Dictionary<int, string>(); 
acctMgr = db.Users.Where(u => u.Title.Contains("Account Manager") || u.Title.Contains("Client Services Manager")).ToDictionary(v => v.ApplicationUserId, v => v.FullName); 

이 ... 그리고 시도

acctMgr.Add(-1, "Choose one"); 

을 추가해야합니다 ...하지만 그리스트의 말미에 추가합니다 (내가 돈 ' 사전은 정렬 될 수 있다고 믿는다.). 그런 다음 변수 선언 다음에 위의 행을 추가하려고했지만 db.Users ... 행으로 바뀝니다.

생각하십니까?

+9

사전 자체는 주문되지 않습니다. 올바른 컬렉션을 사용하고 있지 않습니다. [SortedDictionary ] (http://msdn.microsoft.com/en-us/library/f7fta44c.aspx)를보고, 실제로 사전을 사용하고 싶다면보십시오. 나는 이것이 당신의 문제에 대한 훌륭한 컬렉션이라고 생각하지 않습니다. 당신이 성취하려는 것을 상세히 설명하고 싶다면, 우리는 당신을 안내 할 수있을 것입니다. –

+0

'SortedDictionary <>'또는'SortedList <>'사용 –

+0

채우기 전에 SelectBox에 "Choose One"을 추가 할 수 있습니까? –

답변

3

사전은 정렬되지 않습니다. 사실상 O (1) 직접 조회를 제공하는 Hashtable 구조입니다. 따라서 순서가 지정된 컬렉션에 대해 잘못된 데이터 구조를 사용하고 있습니다. List<KeyValuePair<int, string>>으로 목록을 추가/삽입하는 순서를 존중하기 때문에 더 나을 수도 있습니다.

+0

Trevor의 경우에는 작동하지 않습니다. 그는 '-1'을 추가 한 후 목록 맨 아래에 있습니다. –

+0

리스트는 어떤 인덱스에도 삽입 할 수있는'Insert (int index, T item)'을 지원합니다. 기타 : http://msdn.microsoft.com/en-us/library/sey5k5z4.aspx – Haney

+0

예, 그는 첫 번째 색인에 삽입 할 수 있습니다. 그러나 그것은 O (n) 삽입입니다. 정렬 된 컬렉션을 사용하면 O (log n)에서이를 수행합니다. –

0

직접 "하나 선택"항목을 컨트롤 자체에 추가하는 것이 좋습니다. 이렇게하면 선택 상자가 필요한 경우 실제 선택이 이루어 졌는지 쉽게 식별 할 수 있습니다.

그러나 일종의 사전에 항목을 추가 할 때 설정하면 현재 사용중인 ToDictionary 방법과 동일한 서명으로 자신의 확장 방법을 만들 수 있지만 SortedDictionary을 반환 할 수 있습니다.