例如,字典包含
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
有没有办法做到这一点?
答案 0 :(得分:1)
您需要Array
或List
,而非字典。
如果要将其保留为字典,可以将其转换为列表,然后删除该条目,然后将其重新转换回字典。
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);
}
}