在字典的特定位置添加元素
本文关键字:位置 添加 元素 定位 字典 | 更新日期: 2023-09-27 18:35:03
我已经问过一个类似的问题,只不过是关于列表的,但这里的一个成员建议我使用字典,所以我决定这样做。 这是原始链接。
将值添加到队列列表中的特定位置
因此,我正在尝试将新进程添加到字典中的特定位置。
rr_dict[Int32.Parse(priority_add_textbox.Text)].Add(new process {
Proc_Id = sjf_queue.Size + 1,
Proc_BurstTime = Int32.Parse(time_add_texbox.Text),
Proc_Priority = Int32.Parse(priority_add_textbox.Text)
});
发生这种情况时,我收到一个错误:
mscorlib 中发生了类型为"System.Collections.Generic.KeyNotFoundException"的未处理异常.dll
其他信息:字典中不存在给定的键。
有谁知道我需要做什么?
您正在尝试在添加之前访问rr_dict[Int32.Parse(priority_add_textbox.Text)]
。
字典不是排序的,因此您尝试使用rr_dict
,就好像它被定义为Dictionary<int, List<process>>
一样,并且正在向键Int32.Parse(priority_add_textbox.Text)
持有的列表中添加新进程。
与此相比,我不确定您想做什么。
在添加到字典之前,您可能只需要
以下内容:var index = Int32.Parse(priority_add_textbox.Text);
if (!rr_dict.ContainsKey(index))
{
rr_dict[index] = new List<process>();
}
...
普通Dictionary
是无序的。其每个条目都作为具有未定义顺序的键值对返回。
如果您想要一个同时考虑顺序的词典,请使用 OrderedDictionary
。
使用当前代码,您将尝试访问密钥条目,而不是添加给定条目(这是您要执行的操作(。
您收到的错误是由字典的 Item
属性引起的。您正在尝试访问字典中的特定位置(即Int32.Parse(priority_add_textbox.Text)
的结果(。如果不存在,则必须先创建它。像这样:
rr_dict[Int32.Parse(priority_add_textbox.Text)] = new Queue<process>();