私のソリューションの一般的なアイデアは、単にインデックスの要素のみを取得することです。
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/05 07:00:00
2012/10/05 08:00:00
2012/10/05 08:00:00
2012/10/05 09:00:00