按周分割数据

Har*_*rry 2 .net c#

我有一个带有时间戳的数据对象:

class MyDataObject
{
    public DateTime timestamp { get; set; }
    public int value { get; set; }

    public MyDataObject(DateTime timestamp, int value)
    {
        this.timestamp = timestamp;
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

在main方法中,我在18天(2.5周)的时间跨度内创建了大量这些数据对象:

    static void Main(string[] args)
    {
        List<MyDataObject> data = new List<MyDataObject>();

        data.Add(new MyDataObject(DateTime.Now, 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(2), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(4), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(6), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(8), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(10), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(12), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(14), 1));
        data.Add(new MyDataObject(DateTime.Now.AddDays(18), 1));
    }
Run Code Online (Sandbox Code Playgroud)

我需要将这些数据除以数周,以便第1天到第6天之间的数据需要放在一个数组中,第8天到第14天之间的数据放在另一个数据中,第18天的数据需要放在另一个数组中.

我需要创建一个某种类型的2D列表,并以某种方式将数据划分为"数组数组",但我很难过.我怀疑我需要使用List.FindAll,但我以前从未使用它,也不知道在这种情况下如何使用它.

Jon*_*eet 7

假设您可以使用LINQ,您只需要以下内容:

var groupedByWeek = data.GroupBy(item => GetStartOfWeek(item.timestamp));
Run Code Online (Sandbox Code Playgroud)

...在给定周的开始处GetStartOfWeek将返回a DateTime,例如

public static DateTime GetStartOfWeek(DateTime value)
{
    // Get rid of the time part first...
    value = value.Date;
    int daysIntoWeek = (int) value.DayOfWeek;
    return value.AddDays(-daysIntoWeek);
}
Run Code Online (Sandbox Code Playgroud)

这将给你一个星期天的一周.您需要稍微调整一下,以考虑从周六,周一或其他任何一周开始的一周.