Есть одна большая (0,5 млн) коллекция, содержащая объекты следующего класса:
public class Comment
{
public DateTime Added { get; set; }
public int Votes { get; set; }
}
Коллекция отсортирована по полю Added.
Нужно получить на каждый день (Added.Date) отдельную коллекцию, которая отсортирована по Votes.
allComments = {получаем отсортированную по Added коллекцию всех Comments };
begin = allComments.First().Added.Date;
end = allComments.Last().Added.Date;
for (var i = begin; i <= end; i = i.AddDays(1))
{
var dayResult = allComments.TakeWhile(x => x.Added.Date == i);
allCommentes = allCommentes.Skip(currentDayResult.Count());
dayResult = currentDayResult.OrderByDescending(x => x.Votes).ToList();
}
Пока это самый быстрый вариант, который я смог написать, но сдается мне, что можно еще немного оптимизировать...
Может во второй строке цикла можно не делать "currentDayResult.Count()" или сортировку в последней строке можно оптимизировать...
ps Пока набирал подумал, что можно попробовать банальный GroupBy, но он не будет знать, что коллекция отсортирована и вряд ли будет быстрее.
И не пинайте за простой вопрос — я только учусь.