从Dictionary中删除项目后,如何相应地更改其他键?

时间:2014-09-09 22:05:00

标签: c# dictionary

例如,字典包含

key:   1 2 3 4 5
value: a b c d e

删除项目b后,字典将如下所示

key:   1 3 4 5 
value: a c d e

但是,我希望密钥是这样的,

key:   1 2 3 4
value: a c d e

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您需要ArrayList,而非字典。

如果要将其保留为字典,可以将其转换为列表,然后删除该条目,然后将其重新转换回字典。

var list = new List<string>();
foreach(var item in dictionary)
{
    list.Add(item.Value);
}
var newDict = new Dictionary<int, string>();
for(int i = 1; i < list.Count + 1; i++)
{
    newDict.Add(i,list[i]);
}

不要这样做。

答案 1 :(得分:0)

正如其他人所说,这不是正确的做法。但是,这是可能的。这是另一种方式:

public static void Test()
{
    var foo = new Dictionary<int, string> { { 1, "a" }, { 2, "b" }, { 3, "c" }, { 4, "d" }, { 5, "e" } };

    RemoveItemByKey(ref foo, 3);
    RemoveItemByValue(ref foo, "a");

    foreach (var kvp in foo)
    {
        Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value);
    }

    // Output:
    // 1: b
    // 2: d
    // 3: e
}

public static void RemoveItemByValue(ref Dictionary<int, string> dictionary, string valueToRemove)
{
    foreach (var kvp in dictionary.Where(item=>item.Value.Equals(valueToRemove)).ToList())
    {
        RemoveItemByKey(ref dictionary, kvp.Key);
    }
}

public static void RemoveItemByKey(ref Dictionary<int, string> dictionary, int keyToRemove)
{           
    if (dictionary.ContainsKey(keyToRemove))
    {
        dictionary.Remove(keyToRemove);

        int startIndex = 1;
        dictionary = dictionary.ToDictionary(keyValuePair => startIndex++, keyValuePair => keyValuePair.Value);
    }
}