Я хочу создать алгоритм, но не знаю, как начать.Своевременный точный алгоритм непрерывных данных
Этот алгоритм фактически будет методом, который принимает массив из N объектов с некоторыми атрибутами, createdAt, value. Я буду сортировать массив от более старого к новому (createdAt), а затем я должен выяснить, насколько совместимыми являются доступные данные, то есть на каждый час у меня есть как минимум 5 записей и каждые полчаса 2 записи.
Пример-testcode:
- (void) normalizeData:(NSArray*)records
{
// sort the records
NSArray* sortedRecords = [records sortWithCreatedAt];
// split all dates in the records, distinct them, and create a dictionary with a key for every date, for value create another dictionary with the hour as key and the records as the value.
NSArray* distinctDates = [sortedRecords valueForKeyPath:@"@distinctUnionOfObjects.createdAt"]; // should only consider month-day-year-hour
NSMutableDictionary* dictionary = [NSMutableDictionary dictionary];
for (NSDate* date in distinctDates)
{
NSString* stringDate = [date string];
NSArray* recordsForDate = [sortedRecords valueForKeyPath:[NSString stringWithFormat:@"[collect].{createdAt=%@}.self", stringDate]]; // let's say you got them with this line
[dictionary setObject:recordsForDate forKey:date];
}
for (NSDate* keyDate in dictionary)
{
NSArray* records = [dictionary objectForKey:keyDate];
Record* previousRecord = nil;
for (Records* record in records)
{
// I'll have to keep the previous record and compare the time difference with the new
NSInteger secondsAfterDate = 0;
if (previousRecord)
{
secondsAfterDate = [record.createdAt timeIntervalSinceDate:previousRecord.createdAt];
// add logic to create trend difference in a model that has for every hour of the records count, the records and suffice description
// logic if the records count and timespan is suffice.
}
previousRecord = record;
}
}
}
Я оценил бы никакого вклада в процесс в методе.
Также конечной целью является создание возврата (вызов обработчика блока) для каждого результата обработанных записей. Логика должна заканчиваться на 5 записей по крайней мере в час и промежуток между ними менее 15 минут.
Когда вы имеете в виду, что вам нужно 5 записей в час, вы имеете в виду между 11:00 и 12:00 или 5 разделенных (в терминах «индекс» в отсортированном массиве) значения разницы во времени должны быть меньше часа? – Larme
Для каждого часа (с 11:00 до 12:00) мне нужно как минимум 5 записей со временем ~ 15 минут. Таким образом, я могу сказать, что у меня достаточно данных для обработки изменений в тренде. –