在字典的特定位置添加元素

本文关键字:位置 添加 元素 定位 字典 | 更新日期: 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>();