2010-08-11 3 views

Répondre

39

Queue a un constructeur qui prend dans un ICollection. Vous pouvez passer votre liste dans la file d'attente pour l'initialiser avec les mêmes éléments:

var queue = new Queue<T>(list); // where 'T' is the lists data type. 
+0

existe-t-il une file d'attente non générique? – zerkms

+0

Bonne prise. Il y a en fait une file d'attente non générique, mais vous voudriez probablement la version générique. J'ai mis à jour ma réponse. –

+0

@zerkms: Il existe une classe 'Queue' non générique dans l'espace de noms 'System.Collections': http://msdn.microsoft.com/en-us/library/system.collections.queue.aspx – Rich

3
var q = new Queue<Object>(); 
for(int i = 0; i < list.Count; i++) q.Enqueue(list[i]); 

C'est, en supposant « même ordre » signifie que le premier élément à dequeued de la file doit être une liste [0].

Si cela signifie le contraire, il suffit d'utiliser la boucle inverse: for(int i = list.Count-1; i >= 0; i--)

0
var mylist = new List<int> {1,2,3}; 
var q = new Queue<int>(mylist); 
4

Que voulez-vous dire par « le même ordre? »

Si vous faites ceci:

var queue = new Queue<object>(list); 

Ensuite, la file d'attente sera énumérait plus dans le même ordre que la liste, ce qui signifie qu'un appel à Dequeue retournerait l'élément qui avait déjà résidé à list[0].

Si vous faites ceci:

var queue = new Queue<object>(list.AsEnumerable().Reverse()); 

Ensuite, la file d'attente sera énumérait plus dans l'ordre inverse de la liste, ce qui signifie qu'un appel à Dequeue retournerait l'élément qui avait déjà résidé à list[list.Count - 1].

+0

+1 pour mentionner les deux directions. –

Questions connexes