2013-10-10 20 views
0

隊列列表添加值到特定位置在隊列

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

回答

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

您可能希望使用字典而不是列表。

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); 
    } 
} 
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;