【问题标题】:How to cast or convert List of objects to queue of objects如何将对象列表转换或转换为对象队列
【发布时间】:2010-08-11 23:37:03
【问题描述】:

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

【问题讨论】:

    标签: c# object queue generic-list


    【解决方案1】:

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

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

    【讨论】:

    • 好收获。实际上有一个非通用队列,但您可能需要通用版本。我已经更新了我的答案。
    • @zerkms:System.Collections 命名空间中有一个非泛型 Queue 类:msdn.microsoft.com/en-us/library/system.collections.queue.aspx
    • 但是现在您已经更新了代码示例以使用Queue&lt;T&gt;,您关于构造函数采用ICollection 的评论不再准确(Queue&lt;T&gt; 构造函数采用IEnumerable&lt;T&gt;) .
    【解决方案2】:

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

    如果你这样做:

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

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

    如果你这样做:

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

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

    【讨论】:

      【解决方案3】:
      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 &gt;= 0; i-- )

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:
          var mylist = new List<int> {1,2,3};
          var q = new Queue<int>(mylist);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-12
            • 1970-01-01
            • 2021-10-01
            • 1970-01-01
            • 2013-12-02
            • 2022-11-17
            相关资源
            最近更新 更多