0

キュー:

    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 個のインデックス用の空のキューを追加してリストを初期化することですが、より良い方法があるかどうかはわかりません。

4

3 に答える 3

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); 
     }
}
于 2013-10-10T16:32:59.833 に答える
1

System.Collections.Generic.Queue独自に記述する代わりに、a を使用する必要があります。System.Collections.Generic.Dictionaryキーと値のルックアップが必要な場合は、a を使用します。

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); 
于 2013-10-10T16:30:04.550 に答える
1

通常、リストには穴がないと想定されているため、インデックス 4 の要素を空のリストに追加すると、インデックス 0 から 3 に null が含まれます。

今、あなたはそのようにすることができます。長さが要求されたインデックスよりも大きいかどうかを確認できます。そうでない場合は、そうなるまで null 値を追加し続けます。次に、インデックスが存在し、それに何かを割り当てることができます。

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 を使用することです。したがって、次のようになりますDictionary<int, T>

Dictionary<int, int?> dict = new Dictionary<int, int?>();
dict[3] = 123;
于 2013-10-10T16:36:08.593 に答える