2013-10-10 3 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>(); 

그런 다음 일반적으로 더 구멍이 없을 것으로 예상되는 등

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

목록과 같은 addprocess 기능을 가지고, 그래서 당신은 빈 목록에 인덱스 4에 요소를 추가한다면,이 만들 것 인덱스 0 ~ 3에는 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<int, T>을 입력하면됩니다.

Dictionary<int, int?> dict = new Dictionary<int, int?>(); 
dict[3] = 123;