如何将一个对象列表转换为队列并保持相同的顺序?
Queue
有一个构造函数,它接受一个ICollection
。您可以将列表传递到队列中,以使用相同的元素进行初始化:
var queue = new Queue<T>(list); // where 'T' is the lists data type.
“相同顺序”是什么意思?
如果你这样做:
var queue = new Queue<object>(list);
然后队列将按与列表相同的顺序枚举,这意味着对于 Dequeue
的调用将返回先前驻留在 list[0]
处的元素。
如果您执行以下操作:
var queue = new Queue<object>(list.AsEnumerable().Reverse());
然后队列将按与列表相反的顺序枚举,这意味着调用Dequeue
将返回先前驻留在list[list.Count - 1]
处的元素。
var q = new Queue<Object>();
for( int i = 0; i < list.Count; i++ ) q.Enqueue( list[i] );
for( int i = list.Count-1; i >= 0; i-- )
。public static class ListExtensions
{
public static Queue<T> ToQueue<T>(this List<T> items) => new Queue<T>(items);
}
var mylist = new List<int> {1,2,3};
var q = new Queue<int>(mylist);
System.Collections
命名空间中有一个非泛型的Queue
类:http://msdn.microsoft.com/en-us/library/system.collections.queue.aspx - RichQueue<T>
,您关于构造函数需要一个ICollection
的说法不再准确(Queue<T>
构造函数需要一个IEnumerable<T>
)。 - Dan Tao