32

如何将对象列表转换为队列,从而保持相同的顺序?

4

5 回答 5

58

Queue有一个构造函数,它接受一个ICollection. 您可以将列表传递到队列中以使用相同的元素对其进行初始化:

var queue = new Queue<T>(list);    // where 'T' is the lists data type.
于 2010-08-11T23:39:51.993 回答
10

“相同的顺序”是什么意思?

如果你这样做:

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

然后队列将以与列表相同的顺序被枚举,这意味着调用Dequeue将返回先前驻留在的元素list[0]

如果你这样做:

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

然后队列将以与列表相反的顺序枚举,这意味着调用Dequeue将返回先前驻留在的元素list[list.Count - 1]

于 2010-08-11T23:42:48.240 回答
4
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-- )

于 2010-08-11T23:38:47.737 回答
3

将此扩展添加到您的工具箱以创建特定类型的 FIFO 队列。

public static class ListExtensions
{
    public static Queue<T> ToQueue<T>(this List<T> items) => new Queue<T>(items);
}
于 2019-06-12T18:43:21.970 回答
2
var mylist = new List<int> {1,2,3};
var q = new Queue<int>(mylist);
于 2010-08-11T23:41:01.317 回答