GigaPr
GigaPr

Reputation: 5386

How to cast or convert List of objects to queue of objects

How can one convert a list of objects to a queue thereby maintaining the same order?

Upvotes: 35

Views: 32523

Answers (5)

ΩmegaMan
ΩmegaMan

Reputation: 31646

Add this extension to your toolbox to create a FIFO queue of the specific type.

public static class ListExtensions
{
    public static Queue<T> ToQueue<T>(this List<T> items) => new Queue<T>(items);
}

Upvotes: 3

Dan Tao
Dan Tao

Reputation: 128317

What do you mean by "the same order?"

If you do this:

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

Then the queue will be enumerated over in the same order as the list, which means that a call to Dequeue would return the element that had previously resided at list[0].

If you do this:

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

Then the queue will be enumerated over in the opposite order as the list, which means that a call to Dequeue would return the element that had previously resided at list[list.Count - 1].

Upvotes: 10

zerkms
zerkms

Reputation: 254944

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

Upvotes: 2

Ryan Brunner
Ryan Brunner

Reputation: 14851

Queue has a constructor that takes in an ICollection. You can pass your list into the queue to initialize it with the same elements:

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

Upvotes: 65

Fyodor Soikin
Fyodor Soikin

Reputation: 80754

var q = new Queue<Object>();
for( int i = 0; i < list.Count; i++ ) q.Enqueue( list[i] );

That is, assuming "same order" means that the first item to be dequeued from the queue should be list[0].

If it means the opposite, just use the reverse loop: for( int i = list.Count-1; i >= 0; i-- )

Upvotes: 4

Related Questions