在进行针对连续值的计算时使用适当的c#集合
本文关键字:集合 计算 连续 | 更新日期: 2023-09-27 18:23:56
我有一个列表示例,其中我想按顺序迭代列表,并获得第一周的值低于提供的最小值(即10),而接下来的两周的值也低于最小值,或者至少有一周的值为负。
例如,"201303"周的值为8,下一周的"201304"(-3)为负,因此无论"201305"(15)是否高于最小值,结果都将为"201303)。
如果"201304"的值为3,则将不存在匹配,并返回null。
var weekList = new List<WeekData>() {
new WeekData {PlanningWeek = "201301", Value = 15}, // 31-12-2013
new WeekData {PlanningWeek = "201302", Value = 12}, // 07-01-2013
new WeekData {PlanningWeek = "201303", Value = 8}, // 14-01-2013
new WeekData {PlanningWeek = "201304", Value = -3}, // 21-01-2013
new WeekData {PlanningWeek = "201305", Value = 15}, // 28-01-2013
new WeekData {PlanningWeek = "201306", Value = 12}, // 04-02-2013
new WeekData {PlanningWeek = "201307", Value = 13}, // 11-02-2013
new WeekData {PlanningWeek = "201308", Value = 8}, // 18-02-2013
new WeekData {PlanningWeek = "201309", Value = 15}, // 25-02-2013
new WeekData {PlanningWeek = "201310", Value = 15}, // 04-03-2013
new WeekData {PlanningWeek = "201311", Value = 15} // 11-03-2013
};
public class WeekData
{
public string PlanningWeek { get; set; }
// GetStartDate() being another custom extension method, used later
public DateTime? WeekStartDate { get { return PlanningWeek.GetStartDate(); }}
public long Value { get; set; }
}
什么是合适的收藏品?排序列表?链接列表?列表还是别的什么?
该列表预计最多包含13个项目。
如果有人有一个很好的例子来实现这一点,那么这也会很有帮助。
考虑到您将拥有的项目数量非常少,您不需要为了性能而求助于基于哈希的结构,并且可以满足于List<WeekData>
(正如您已经在做的那样)。
关于您的查询,使用普通的旧循环而不是LINQ可能更容易做到这一点。这里有一个例子:
WeekData firstBelow10 = null;
for (int i = 0; i < weekList.Count - 2; ++i)
if (weekList[i] < 10 && (
weekList[i + 1] < 10 &&
weekList[i + 2] < 10 ||
weekList[i + 1] < 0 ||
weekList[i + 2] < 0))
firstBelow10 = weekList[i];