假设我在2018年有一个包含5个日期[Mar 2,Mar 6, Mar 7, Mar 26]
的列表。
本周开始于周六和周日结束。
我想要以下结果
[Mar 2]
[Mar 6, Mar 7]
[Mar 26]
如何使用LINQ进行操作?或者以功能的方式。
答案 0 :(得分:2)
您可以在DateTime
Calendar.GetWeekOfYear Method (DateTime, CalendarWeekRule, DayOfWeek)
返回包含指定日期的一年中的一周 日期时间值。
时间
- 输入:
System.DateTime
- 日期和时间值。
规则
- 输入:
System.Globalization.CalendarWeekRule
- 定义日历周的枚举值。
Firstdayofweek可
- 输入:
System.DayOfWeek
- 表示一周中第一天的枚举值。
鉴于
List<DateTime> myAwesomeList;
<强>用法强>
var result = myAwesomeList.GroupBy(x =>
CultureInfo.CurrentCulture.Calendar
.GetWeekOfYear(x.date,
CalendarWeekRule.FirstDay,
DayOfWeek.Saturday))
.Select(grp => grp.ToList())
.ToList();
<强>返回强>
List<List<DateTime>>
答案 1 :(得分:0)
我想将此作为一个迭代答案发布,因为我不想在问题中引入迭代偏见思维,因为这可能会影响我得到的答案的优雅:)所以如果你理解,请不要读这个问的问题。
这是一种使用迭代方法解决问题的快速而肮脏的方法。
var orders = new List<int> { 4, 5, 6, 0, 1, 2, 3 };
var nums = new List<int> {2, 5, 6, 2, 2, 4};
var queue = new Queue<int>(nums);
var results = new List<List<int>>();
while (queue.Count > 0)
{
var subLists = new List<int>();
foreach (var order in orders)
{
if(order == queue.Peek())
subLists.Add(queue.Dequeue());
if (queue.Count == 0)
break;
}
results.Add(subLists);
}