使用linq将列表或订购日期拆分为几周

假设我在2018年有5个日期[Mar 2,Mar 6, Mar 7, Mar 26]的列表。周六开始,周六结束。 我想要以下结果

 [Mar 2] [Mar 6, Mar 7] [Mar 26] 

我怎么能用LINQ做到这一点? 或者以function的方式。

您可以在DateTime上使用以下内容

Calendar.GetWeekOfYear方法(DateTime,CalendarWeekRule,DayOfWeek)

返回包含指定DateTime值中的日期的一年中的一周。

  • 时间

    • 键入: System.DateTime
    • 日期和时间值。
  • 规则

    • 键入: System.Globalization.CalendarWeekRule
    • 用于定义日历周的枚举值。
  • Firstdayofweek可

    • 键入: System.DayOfWeek
    • 枚举值,表示一周的第一天。

特定

 List myAwesomeList; 

用法

 var result = myAwesomeList.GroupBy(x => CultureInfo.CurrentCulture.Calendar .GetWeekOfYear(x.date, CalendarWeekRule.FirstDay, DayOfWeek.Saturday)) .Select(grp => grp.ToList()) .ToList(); 

返回

 List> 

我想发布这个作为迭代答案,因为我不想在问题中引入迭代偏见思考,因为这可能会影响我得到的答案的优雅:)所以如果你理解这个问题请不要阅读问。

这是一种使用迭代方法解决问题的快速而肮脏的方法。

 var orders = new List { 4, 5, 6, 0, 1, 2, 3 }; var nums = new List {2, 5, 6, 2, 2, 4}; var queue = new Queue(nums); var results = new List>(); while (queue.Count > 0) { var subLists = new List(); foreach (var order in orders) { if(order == queue.Peek()) subLists.Add(queue.Dequeue()); if (queue.Count == 0) break; } results.Add(subLists); }