【发布时间】:2010-08-11 23:37:03
【问题描述】:
如何将对象列表转换为队列,从而保持相同的顺序?
【问题讨论】:
标签: c# object queue generic-list
如何将对象列表转换为队列,从而保持相同的顺序?
【问题讨论】:
标签: c# object queue generic-list
Queue 有一个接受ICollection 的构造函数。您可以将列表传递到队列中以使用相同的元素对其进行初始化:
var queue = new Queue<T>(list); // where 'T' is the lists data type.
【讨论】:
System.Collections 命名空间中有一个非泛型 Queue 类:msdn.microsoft.com/en-us/library/system.collections.queue.aspx
Queue<T>,您关于构造函数采用ICollection 的评论不再准确(Queue<T> 构造函数采用IEnumerable<T>) .
“相同的顺序”是什么意思?
如果你这样做:
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] );
也就是说,假设“相同顺序”意味着要从队列中出列的第一项应该是list[0]。
如果意思相反,就使用反向循环:for( int i = list.Count-1; i >= 0; i-- )
【讨论】:
将此扩展添加到您的工具箱以创建特定类型的 FIFO 队列。
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);
【讨论】: