C# 按周分割数据

C# 按周分割数据,c#,.net,C#,.net,我有一个具有时间戳的数据对象: class MyDataObject { public DateTime timestamp { get; set; } public int value { get; set; } public MyDataObject(DateTime timestamp, int value) { this.timestamp = timestamp; this.value = value; } }

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

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

    public MyDataObject(DateTime timestamp, int value)
    {
        this.timestamp = timestamp;
        this.value = value;
    }
}
在main方法中,我在18天(2.5周)的时间跨度内创建了很多这样的数据对象:

static void Main(字符串[]args)
{
列表数据=新列表();
Add(新的MyDataObject(DateTime.Now,1));
Add(新的MyDataObject(DateTime.Now.AddDays(2,1));
Add(新的MyDataObject(DateTime.Now.AddDays(4,1));
Add(新的MyDataObject(DateTime.Now.AddDays(6,1));
Add(新的MyDataObject(DateTime.Now.AddDays(8,1));
Add(新的MyDataObject(DateTime.Now.AddDays(10,1));
Add(新的MyDataObject(DateTime.Now.AddDays(12,1));
Add(新的MyDataObject(DateTime.Now.AddDays(14,1));
Add(新的MyDataObject(DateTime.Now.AddDays(18,1));
}
我需要将这些数据除以周,这样第1天到第6天之间的数据需要放在一个数组中,第8天到第14天之间的数据需要放在另一个数组中,第18天的数据需要单独放在另一个数组中


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

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

var groupedByWeek = data.GroupBy(item => GetStartOfWeek(item.timestamp));
。。。其中,
GetStartOfWeek
将在给定的一周开始时返回一个
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);
}

这将给你一个周日为基础的一周。你需要调整一点来考虑从星期六、星期一或什么时候开始的一周。

< P>你要做的第一件事就是得到给定的时间戳的周数。这个方法就是为了达到这个目的。使用LINQ的扩展方法,将列表划分为不同的周非常容易

using System.Globalization; // for Calendar
using System.Linq; // for GroupBy

...

DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
Calendar cal = dfi.Calendar
var groups = data.GroupBy(x => cal.GetWeekOfYear(
    x.timestamp, dfi.CalendarWeekRule, dfi.FirstDayOfWeek));

从一周中的哪一天开始的几周。。。星期天到星期六,或者星期一到星期天,等等?首先,关注返回周数的函数。注意,这将把不同年份的同一周放在一起。这可能是需要的。。。但不清楚,这是真的。你可以根据,
new{year=x.timestamp.GetYear(),week=…}
或类似的东西来分组,以满足你的特殊需要。你如何计算每个星期
MyDataObject.value
的总和?@MikeBarnes:一旦你得到了分组,你就可以使用
。选择(g=>g.sum(x=>x.value))
或类似的东西。
using System.Globalization; // for Calendar
using System.Linq; // for GroupBy

...

DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
Calendar cal = dfi.Calendar
var groups = data.GroupBy(x => cal.GetWeekOfYear(
    x.timestamp, dfi.CalendarWeekRule, dfi.FirstDayOfWeek));