有可能直接对字典提问吗
本文关键字:字典 有可能 | 更新日期: 2023-09-27 18:26:29
我有一个在List中使用自定义类(Price、Quantity、DateTime)的高速应用程序。如果找不到价格,我可以添加到列表中,或者用订单数量和日期时间更新它,然后在列表上运行查询,以按订单数量一次又一次地提取前4次出现的情况。代码在前半个小时工作得很好,然后数千条记录被删除。由于索引的原因,我曾想过尝试一本字典,但无法理解update和Linq语句。
-
是否可以直接对字典中的字段执行Linq操作,比如使用自定义类或结构来提取前4个出现的项?如果是这样的话,一个简短的例子将是伟大的
-
使用更新的订单数量和日期时间从TryGetValue执行后,我可以直接更新字典字段吗?如果是这样的话,一个简短的例子将是伟大的
-
。。。还是字典不是前进的方式,记住速度是至关重要的?
感谢您的帮助。
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个值进行比较,如果新值更大,则交换一个。这将消除对整个数据集进行线性搜索的需要。