2014-01-09 43 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

使用'Dictionary'在这里并不是很好,因为它不妨碍任何顺序。你应该看看'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;    
    } 
}