如何将对象列表转换为对象队列?

33

如何将一个对象列表转换为队列并保持相同的顺序?

5个回答

62

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

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

好的,你说得对。实际上有一个非泛型队列,但你可能想要泛型版本。我已经更新了我的答案。 - Ryan Brunner
@zerkms: System.Collections 命名空间中有一个非泛型的 Queue 类:http://msdn.microsoft.com/en-us/library/system.collections.queue.aspx - Rich
1
但是现在您已经更新了代码示例以使用Queue<T>,您关于构造函数需要一个ICollection的说法不再准确(Queue<T>构造函数需要一个IEnumerable<T>)。 - Dan Tao

10

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

如果你这样做:

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

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

如果您执行以下操作:

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

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


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-- )

3
将此扩展程序添加到您的工具箱,以创建特定类型的FIFO队列。
public static class ListExtensions
{
    public static Queue<T> ToQueue<T>(this List<T> items) => new Queue<T>(items);
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接