更改词汇表的键

时间:2014-01-09 07:35:36

标签: c# loops dictionary iterator

假设我有一个词汇

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 ...... ....

怎么做?

1 个答案:

答案 0 :(得分: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;               
    }
}