我正在寻找以下优化。
我有一个具有一些属性的对象。为简单起见,我将在此方案中显示唯一重要的2个。
public class DomainData
{
public long Id{ get; set; }
public long SoldTickets { get; set; }
}
我调用我的数据库并获取上述对象的列表:
var databaseData = _iOvervatchManager.GetDomainData(id);// gets date from db
var model = new List<DomainModel>();
现在我需要计算列表项之间售出的票数。
current = current - previous
我使用以下代码进行计算:
for (int i = 0; i <= databaseData.Count() -1; i++)
{
if (i != 0)
{
long ticket = databaseData[i].SoldTickets- databaseData[i - 1].SoldTickets;
model.Add(new DomainModel
{
DomainId = databaseData[i].DomainId ,
SoldTicketsLastUpdate = ticket
});
}
}
现在在原始对象上设置值。
for(int i= 0; i< databaseData.Count(); i++)
{
if(databaseData[i].Id == model[i].DomainId )
databaseData[i].SoldTickets = model[i].SoldTicketsLastUpdate;
}
我认为这是实现这一目标的一种可怕方式,因为我在第一次循环中可以做到这一点,但我无法弄清楚如何做到这一点。
我的第一次尝试是:
for (int i = 0; i <= databaseData.Count() -1; i++)
{
if (i != 0)
{
databaseData[i].SoldTickets
= databaseData[i].SoldTickets - databaseData[i - 1].SoldTickets;
}
}
但这是错误的,因为我更改了对象值,当我进入下一个增量时,前一个值已经被修改,因此该循环增量的当前值得到了错误的计算。
如何优化此功能?
答案 0 :(得分:4)
假设在此次运行(!!)后没有添加新数据,请向后执行for循环:
for (int i = databaseData.Count() - 1; i > 0; i--)
{
databaseData[i].SoldTickets = databaseData[i].SoldTickets - databaseData[i - 1].SoldTickets;
}
由于循环仅针对i > 0
运行,因此不需要检查i != 0
。