【发布时间】:2015-12-13 01:31:35
【问题描述】:
我有一个高速应用程序,在列表中使用自定义类(价格、数量、日期时间)。如果没有找到价格,我要么添加到列表中,要么使用 Order Qty 和 DateTime 更新它,然后在列表中运行查询以一次又一次地按订单数量提取前 4 次出现。该代码在前半小时运行良好,然后在数千条记录之后陷入困境。由于索引的原因,我考虑过尝试字典,但无法弄清楚更新和 Linq 语句。
是否可以直接 Linq 到字典中的字段,比如使用自定义类或结构,以提取前 4 次出现?如果是这样,一个简短的例子会很棒
我能否在使用更新的 Order Qty 和 DateTime 从 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
}
【问题讨论】:
-
请说明操作、参数和作用。例如,您所说的“未找到价格”是什么意思 - 您是按价格搜索吗?还有“按订单数量排名最高的事件” - 数量较多的商品?等等。
-
我明白了,您正在按价格搜索,如果有该价格的订单,那么您会以该价格获取前 4 个订单(我想是按数量)?
-
要回答问题的标题,您可以使用 LINQ 在字典中进行搜索。我认为更大的问题是您应该,或者您应该如何真正构建数据以进行有效查询。
-
现在我在列表中搜索订单价格,如果没有找到,我添加订单价格、订单数量和日期时间。如果我找到订单价格,我只需更新订单数量和日期时间。每隔一秒我就会查询List,找出订单量最大的4个价格并吐出来
-
您可以在当前使用列表的操作中添加代码吗?这样就更容易理解您的要求了。
标签: c# dictionary