【问题标题】:add items from a list to a queue without using a loop [duplicate]不使用循环将列表中的项目添加到队列[重复]
【发布时间】:2021-12-09 18:44:51
【问题描述】:

有没有办法在不使用循环的情况下将列表中的项目添加到队列中?以下是我目前拥有的代码:

                    Queue<User> myQueue = new Queue<User>();          
                    List<string> names = new List<string>(){"X", "Y", "Z"};  
          
                    foreach (var name in names)
                    {
                        var response = new User
                        {
                            Name = name,
                            Level = 1
                        };

                        myQueue.Enqueue(response);
                    }

【问题讨论】:

标签: c#


【解决方案1】:

您可以使用 linq foreach,它看起来不像一个循环,但它在技术上是:

names.ForEach(x => myQueue.Enqueue(new User(){Name = name, Level = 1}));

【讨论】:

    【解决方案2】:

    您可以将它们添加到新队列中:

    Queue<AType> ANewQueue = new Queue<AType>(ExistingListOfAType);
    

    你可以这样做:

    Queue<AType> AnExistingQueue = new Queue<AType>(RecipeTermsToExclude);
    List<AType> AListIWantToAddToThatQueue = new List<AType>(RecipeTermsToExclude);
    List<AType> ATempListForTheQueueContents = AnExistingQueue.ToList();
    ATempListForTheQueueContents.AddRange(AListIWantToAddToThatQueue);
    AnExistingQueue = new Queue<AType>(ATempListForTheQueueContents);
    

    【讨论】:

      【解决方案3】:

      您可以尝试从 Linq 查询创建队列:

         using System.Linq;
      
         ...
      
         List<string> names = new List<string>(){"X", "Y", "Z"};
      
         ...
      
         var myQueue = new Queue<User>(names
           .Select(name => new User() {
              Name = name,
              Level = 1 
            }));
      

      如果你想排队一个范围的项目并且你不想重复你自己同时一遍又一遍地实现循环再次;你可以用循环编写一个扩展方法

       public static class QueueExtensions {
         public static void EnqueueRange<T>(this Queue<T> queue, IEnumerable<T> range) {
           if (null == queue)
             throw new ArgumentNullException(nameof(queue));
           if (null == range)
             throw new ArgumentNullException(nameof(range));
      
           foreach (var item in range)
             queue.Enqueue(item);  
         }
       }  
      

      并使用它

           Queue<User> myQueue = new Queue<User>();          
           
           List<string> names = new List<string>(){"X", "Y", "Z"};  
            
           myQueue.EnqueueRange(name.Select(name => new User() {
              Name = name,
              Level = 1 
            })); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-19
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-27
        相关资源
        最近更新 更多