从字典中删除并减少其他键值

本文关键字:其他 键值 字典 删除 | 更新日期: 2023-09-27 18:07:24

我有Dictionary<string, string>,其中键具有值0,1,2,3,4,etc,我总是有未知数量的元素。重要的是要像字典一样,而不是像列表一样……

例如我有

some_dict<"0","string a">;
some_dict<"1","string b">;
some_dict<"2","string c">;
some_dict<"3","string d">;
some_dict<"4","string e">;

现在我需要为一些键删除一些项。例如1 and 2,我可以使用remove

some_dict.remove("1");
some_dict.remove("2");

得到:

some_dict<"0","string a">;
some_dict<"3","string d">;
some_dict<"4","string e">;

但问题是,我需要减少所有以下键。如:

some_dict<"0","string a">;
some_dict<"1","string d">;
some_dict<"2","string e">;

我想使用for将所有字符串移动到一个地方,然后最后从字典中删除。例如,我需要删除键1:

for(int i=1;i<some_dict.count();++i)
{
     some_dict[Convert.ToString(i)] = some_dict[Convert.ToString(i+1)]
}
some_dict.remove(some_dict.count()-1);

我在我的应用程序中写了一些类似的东西,这是工作。但如果我在字典中有500个或更多的值,会这么慢吗?我能用更好的方法吗?

从字典中删除并减少其他键值

如果你坚持使用你的字典:

// remove whatever you want to remove, then recreate it:
some_dict = some_dict.OrderBy(kv => int.Parse(kv.Key))
    .Select((kv, index) => new { pair = kv, index })
    .ToDictionary(x => x.index.ToString(), x => x.pair.Value);

但是正如其他人评论的那样,如果你想通过索引访问项目,你应该考虑使用List<string>,它可以像字典一样使用。如果您想使用字典,还应该考虑使用Dictionary<int, string>