将值添加到队列列表中的特定位置

时间:2013-10-10 16:23:31

标签: c#

队列:

    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个索引添加空队列来初始化列表,但我不知道是否有更好的方法。

3 个答案:

答案 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;