Как привести или преобразовать Список объектов в очередь объектов - PullRequest
27 голосов
/ 12 августа 2010

Как можно преобразовать список объектов в очередь, тем самым поддерживая тот же порядок?

Ответы [ 5 ]

51 голосов
/ 12 августа 2010

Queue имеет конструктор, который принимает ICollection. Вы можете передать свой список в очередь, чтобы инициализировать его теми же элементами:

var queue = new Queue<T>(list);    // where 'T' is the lists data type.
9 голосов
/ 12 августа 2010

Что вы подразумеваете под "тем же порядком?"

Если вы сделаете это:

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

Тогда очередь будет перечисляться в том же порядке, что и список, чтоозначает, что вызов Dequeue вернет элемент, который ранее находился в list[0].

Если вы сделаете это:

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

Тогда очередь будет перечислена впорядок, противоположный списку, это означает, что вызов Dequeue вернет элемент, который ранее находился в list[list.Count - 1].

3 голосов
/ 12 августа 2010
var q = new Queue<Object>();
for( int i = 0; i < list.Count; i++ ) q.Enqueue( list[i] );

То есть, если предположить, что «тот же порядок» означает, что первым элементом, подлежащим удалению из очереди, должен быть список [0].

Если это означает обратное, просто используйте обратный цикл: for( int i = list.Count-1; i >= 0; i-- )

0 голосов
/ 12 июня 2019

Добавьте это расширение к вашей панели инструментов, чтобы создать очередь FIFO определенного типа.

public static class ListExtensions
{
    public static Queue<T> ToQueue<T>(this List<T> items) => new Queue<T>(items);
}
0 голосов
/ 12 августа 2010
var mylist = new List<int> {1,2,3};
var q = new Queue<int>(mylist);
...