使用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); }