在进行查看连续值的计算时适当的c#集合

时间:2013-07-19 21:43:13

标签: c# .net list collections linked-list

我有这个列表示例,我希望按顺序遍历列表并获得第一周的值低于最小供应值(即10),并且接下来的2周值也低于最小值OR至少其中一个接下来的2周值为负值。

e.g。周“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; }
    }

这样做的合适集合是什么? SortedList? LinkedList?清单?或其他什么?

该列表最多包含13个项目。

如果某人有一个很好的例子来实现这一点,那么这也会非常有帮助。

1 个答案:

答案 0 :(得分:1)

鉴于您将拥有的项目数量如此之小,您不需要求助于基于哈希的结构来获得性能,并且可以选择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];