我的解决方案的总体思路是您只需在索引处获取元素:
0, 3, 4, 7, 8, 11, 12, ...
或者换句话说 - 如果index % 4
是 0 或 3。
在此之前,我们检查是否在末尾有剩余日期count % 4
。如果有的话——我们剪掉它们。
这假设日期将作为您说明的输入全部有效。
这是我的实现:
public static IEnumerable<DateTime> CutTimes(IEnumerable<DateTime> source)
{
var count = source.Count();
var ignore = count % 4;
if (ignore != 0)
{
source = source.Take(count - ignore);
}
return source.Where((time, index) => index % 4 == 0 || index % 4 == 3);
}
用法:
var times = new[]
{
new DateTime(2012, 5, 10, 7, 00, 0),
new DateTime(2012, 5, 10, 7, 30, 0),
new DateTime(2012, 5, 10, 7, 30, 0),
new DateTime(2012, 5, 10, 8, 00, 0),
new DateTime(2012, 5, 10, 8, 00, 0),
new DateTime(2012, 5, 10, 8, 30, 0),
new DateTime(2012, 5, 10, 8, 30, 0),
new DateTime(2012, 5, 10, 9, 00, 0),
new DateTime(2012, 5, 10, 9, 00, 0),
new DateTime(2012, 5, 10, 9, 30, 0)
};
var result = CutTimes(times);
foreach (var time in result)
{
Console.WriteLine(time);
}
输出:
2012 年 10 月 5 日 07:00:00
2012 年 10 月 5 日 08:00:00
2012 年 10 月 5 日 08:00:00
2012 年 10 月 5 日 09:00:00