队列:
public class Queue
{
public Queue() { }
public process Front() { return this.q_list.ElementAt(0); }
public int Size { get { return this.q_list.Count; } }
public bool IsEmpty { get { return this.q_list.Count <= 0 ? true : false; } }
public void Enqueue(process proc) { this.q_list.Add(proc); }
public void Dequeue() { this.q_list.RemoveAt(0); }
public List<process> q_list = new List<process>();
};
创建列表:
List<Queue> rr_list = new List<Queue>();
流程结构:
public class process
{
public int Proc_a;
public int Proc_b;
public int Proc_Index;
};
假设我想根据Proc_Index的值将进程添加到特定位置的列表中。我怎样才能做到这一点?我们还假设列表最初是空的。
process proc = new process{
Proc_a = 1,
Proc_b = 2,
Proc_Index = 4 };
我想将它添加到位于索引4的列表中的队列。
这可能吗?
我试过了:
rr_list[proc.Proc_Index].Enqueue(proc);
但它表示存在索引未找到或存在问题的问题。
我能做的唯一事情是通过为最多20个索引添加空队列来初始化列表,但我不知道是否有更好的方法。
答案 0 :(得分:1)
您应该使用System.Collections.Generic.Queue
而不是自己编写。如果您想要键值查找,请使用System.Collections.Generic.Dictionary
。
var rr_list = new Dictionary<int, Queue<process>>();
process proc = new process{
Proc_a = 1,
Proc_b = 2,
Proc_Index = 4 };
rr_list[proc.Proc_Index].Enqueue(proc);
答案 1 :(得分:1)
您可能希望使用字典而不是列表。
var rr_list = new Dictionary<int, Queue>();
然后有一个addprocess函数
function void AddProcess(proccess proc){
if(rr_list.ContainsKey(proc.Proc_Index){
rr_list[proc.Proc_Index].Enqueue(proc);
} else {
rr_list[proc.Proc_Index] = (new Queue()).Enqueue(proc);
}
}
答案 2 :(得分:1)
列表通常应该没有漏洞,因此如果要将索引4处的元素添加到空列表中,这将使索引0到3包含空值。
现在,你可以这样做。您可以检查长度是否大于请求的索引,如果不是,请继续添加空值,直到它为止。那么索引就会存在,你可以给它分配一些东西:
static void EnsureLength<T> (List<T> list, int index)
{
while (list.Count <= index)
list.Add(default(T));
}
然后你可以像这样使用它:
List<int?> list = new List<int?>();
EnsureLength(list, 3);
list[3] = 123;
一种可能更好的方法是简单地使用词典,特别是如果你知道你会有洞。所以你只需Dictionary<int, T>
:
Dictionary<int, int?> dict = new Dictionary<int, int?>();
dict[3] = 123;