【发布时间】:2017-05-08 12:04:51
【问题描述】:
为特定时间段设置了价格...我无法想出一种算法来确定特定时间段的最低价格。
我正在使用对象列表执行此操作,其中对象具有属性DateTime StartDate, DateTime EndDate, decimal Price。
例如,两个价格集及其有效日期范围:
A. 09/26/16 - 12/31/17 at $20.00
B. 12/01/16 - 12/31/16 at $18.00
您可以看到 B 在 A 时间段内并且更低。
我需要把它转换成这个:
A. 09/26/16 - 11/30/16 at $20.00
B. 12/01/16 - 12/31/16 at $18.00
C. 01/01/17 - 12/31/17 at $20.00
它必须适用于任意数量的日期范围和组合。有没有人遇到过任何我可以操纵以获得我需要的结果的东西?或者有什么建议?
编辑:我的数据结构:
public class PromoResult
{
public int ItemId { get; set; }
public decimal PromoPrice { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int PromoType { get; set; } // can ignore this...
}
【问题讨论】:
-
Stack Overflow 更专注于帮助解决您提出的实现中的问题,而不是提供新的实现。
-
哦,老天,老天……我一直在努力解决这个问题。我有一个解决方案,但我不确定你会喜欢它。
-
@Chris Berger 我会接受的。我整天都在处理合并日期范围并修复它们,这是我需要解开这个谜题的最后一部分……而且到目前为止还不是很好。
-
所以,我正在浏览我的代码,试图找到我的解决方案,我意识到我的实现完全是在 SQL 中,而不是在 C# 中......编辑:而且,它非常复杂,非常复杂案例,并且还专门针对一次一个日期...
-
SQL 可能会更好。我正在获取一个独特的
ItemId, StartDate, EndDate, Price, PriceType并在 C# 中对其进行操作。如果可能的话,在 SQL 中可能会更好......但我已经走了一条复杂的道路来解决我的问题。基本上,如果日期范围重叠或接触并且价格相同,我必须合并它们。我也许可以将其转换为 Linq。
标签: c# algorithm date-range