有可能直接对字典提问吗

本文关键字:字典 有可能 | 更新日期: 2023-09-27 18:26:29

我有一个在List中使用自定义类(Price、Quantity、DateTime)的高速应用程序。如果找不到价格,我可以添加到列表中,或者用订单数量和日期时间更新它,然后在列表上运行查询,以按订单数量一次又一次地提取前4次出现的情况。代码在前半个小时工作得很好,然后数千条记录被删除。由于索引的原因,我曾想过尝试一本字典,但无法理解update和Linq语句。

  1. 是否可以直接对字典中的字段执行Linq操作,比如使用自定义类或结构来提取前4个出现的项?如果是这样的话,一个简短的例子将是伟大的

  2. 使用更新的订单数量和日期时间从TryGetValue执行后,我可以直接更新字典字段吗?如果是这样的话,一个简短的例子将是伟大的

  3. 。。。还是字典不是前进的方式,记住速度是至关重要的?

感谢您的帮助。

List<PriceLevel> TrackPrice = new List<PriceLevel>();
        decimal loopLast=0;//sample only
        int loopLastQuantity=0;//sample only
        DateTime inputDateDT=DateTime.Now;//sample
        // Add or Update List
          var foundit = TrackPrice.FirstOrDefault(x => x.ProgramPrice == loopLast);
                        if (foundit != null)// Found existing record
                        {
                            foundit.ProgramQuantity += loopLastQuantity;
                            foundit.ProgramLastTime = inputDateDT;
                        }
                        else // Add a new record
                        {
                            TrackPrice.Add(new PriceLevel
                            {
                                ProgramPrice = loopLast,
                                ProgramQuantity = loopLastQuantity,
                                ProgramLastTime = inputDateDT,
                            });
                        }
                    }
    // Query the List
         var finalFourQuantities = (from a in TrackPrice
                                               orderby a.ProgramQuantity descending
                                               where a.ProgramQuantity > 300000
                                               select new
                                               {
                                                   a.ProgramPrice,
                                                   a.ProgramQuantity,
                                                   a.ProgramLastTime,
                                               }).Take(4);
                    foreach (var myprice in finalFourQuantities)
                    {   
                        //Process 4 order prices
                    }               
        public class PriceLevel
    {
        public decimal ProgramPrice         { get; set; }
        public int ProgramQuantity          { get; set; }
        public DateTime ProgramLastTime     { get; set; }// Last Order Time
    }

有可能直接对字典提问吗

您可以简单地对字典的Values属性运行linq查询,将其视为任何其他IEnumerable<T>

关于解决方案的性能,您可以尝试将当前的4个顶级值单独存储在一个数组中,然后每当添加/更新某个值时,您只需要将新值与当前的前4个值进行比较,如果新值更大,则交换一个。这将消除对整个数据集进行线性搜索的需要。