2009-10-28 1 views
5

그래서 일부 객체를 반복하면서 사전> 객체를 초기화합니다.사전에 항목 추가 <int, List <int>>

그래서 먼저 내가 키가 존재하는 경우가 않는 경우, 나는 그렇지 않은 경우

, 나는 새로운 키와 새 목록

을 만듭니다 목록에 추가됩니다 확인 그게 올바른 논리 ?
난을해야 할 것 :

new List<int>(); 

내가 바로 항목을 삽입 처음?

즉 :

if(myDic.ContainsKey(car.ID)) 
{ 
     myDic[car.ID].Add(car.MfgID); 
} 
else 
{ 
    myDic.Add(car.ID, new List<int>); 
    myDic[car.ID].Add(car.MfgID); 
} 

답변

19

귀하의 접근 방식은 잘 작동합니다. 두 사전 검색 (하나는 Contains에 대한 것이고 목록에 항목을 추가하기위한 것)이 필요하기 때문에 약간 비효율적입니다. 당신은보다 효율적으로 Dictionary.TryGetValue 방법을 사용하여 수행 할 수 있습니다

List<int> list; 
if (!myDic.TryGetValue(car.ID, out list)) 
    myDic.Add(car.ID, list = new List<int>()); 
list.Add(car.MfgId); 

그것은 목록을 작성하고 (그것이 가능하다면 물론, 귀하의 경우) 한 번에 사전에 추가하는 것이 더 효율적입니다.

var list = new List<int> { 1, 9, 8, 9, 1, 8, 1, 2 }; 

또한 something like this to map a key to multiple values 사용을 고려할 수 : C#을 3.0에서 항목이 컴파일 타임에 알려진 경우 쉽게 목록을 입력 할 수 있습니다컬렉션 이니셜 라이저라는 기능이있다.

+0

위대한, 지금 당신과 리드는 단지 하나의 대답을 결합해야합니다 :) –

+0

오, 그리고 컬렉션 initializers 언급 가치가있을 수도 있습니다. –

+0

@Pavel : 제 대답은 리드의 대답에서 언급 한 순서 변경의 필요성을 없애줍니다. 항상 하나의 사전 검색을 수행합니다. –

관련 문제