2014-01-09 2 views
0

을의 변화를 확인의 내가 어휘 있다고 가정 해 봅시다 어휘의 키

public Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>(); 

키 - 1, ..., n은 지금은 이제 5 번째 요소라고 할 수 있지만, 정상 유지하려면 삭제하려는

세는 법.

가 1, 2, 3, 4, 5, 6, 7, 8, 9, .... 대신에 1, 2, 4, 6, 7, 8, 9, ....

어떻게 만드시겠습니까?

+2

방금 ​​대신 목록을 사용할 수 없습니다 :

여기 원래 사전을 수정 않으며 약간 더 나은 성능과 메모리 사용을 제공 할 수있는 버전이다? 인덱스는 "정상적인 수치"를 유지합니다. –

+0

'사전'을 사용하면 어떤 순서도 막지 않으므로 여기서는별로 좋지 않습니다. 당신은 아마'SortedList ' – MarcinJuraszek

+0

내가 직접 색인을 통과해야합니다. – Mike

답변

0

이 유틸리티 메소드 정의 할 수 있습니다 :

public static IDictionary<int, T> RemoveItem<T>(IDictionary<int, T> dict, int key) 
{ 
    return dict.Where(kv => kv.Key != key) 
       .ToDictionary(kv => kv.Key > key ? kv.Key - 1 : kv.Key, 
          kv => kv.Value); 
} 

을 그리고 그냥 같이 호출 :

이 원래 사전 개체를 수정할 수 있지만와 새로 생성하지 않는
var twoRemoved = RemoveItem(dict, 2); 

key 이후의 키가 1 씩 이동하고 키 값이 key 인 원래 항목이 제거되었습니다.

public static void RemoveItem2<T>(IDictionary<int, T> dict, int key) 
{ 
    dict.Remove(key); 
    T item; 
    while (dict.TryGetValue(++key, out item)) 
    { 
     dict.Remove(key); 
     dict[key - 1] = item;    
    } 
} 
관련 문제