如何在C#中将一系列项目排队?

42

使用列表

List<int> list = new List<int>();
list.AddRange(otherList);

如何使用队列(Queue)来实现这个功能?因为这个集合(Collection)没有 AddRange 方法。

Queue<int> q = new Queue<int>();
q.AddRange(otherList); //does not exists

3
答案基本上是“您可以在构造时执行,但除了逐个调用Enqueue之外,没有经过优化的AddRange等效方法。” - billpg
3个回答

43
otherList.ForEach(o => q.Enqueue(o));

您还可以使用这个扩展方法:
    public static void AddRange<T>(this Queue<T> queue, IEnumerable<T> enu) {
        foreach (T obj in enu)
            queue.Enqueue(obj);
    }

    Queue<int> q = new Queue<int>();
    q.AddRange(otherList); //Work!

28
您可以使用otherList.Foreach(q.Enqueue),而无需将其装箱到另一个 lambda 表达式中。 - Adassko

22

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

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

在您的情况下,请按如下方式使用

Queue<int> ques = new Queue<int>(otherList);

14
解决了提问者的问题,但只适用于空队列。 - v01pe

5
您可以初始化队列列表:
Queue<int> q = new Queue<int>(otherList);

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