我有一個具有屬性時間和數量的Stat對象。我有一個(按時間排序)每小時進入的這些對象的列表。我想要集羣顯示。 有沒有一種很好的方式來在目標c中按時間聚類數據?或比以下天真的算法更好的算法?將日期按小時,天,周,月,年進行聚類數據目標c
這是每週做一個例子。其他類似,但您更改日期組件。
-(void) makeWeeklyData{
Stat *prev = self.hourlyData[0];
NSInteger sum = 0;
NSMutableArray *weeklyData = [NSMutableArray array];
for (CSInstallStat *data in self.hourlyData) {
NSDateComponents *itemComps = [[NSCalendar currentCalendar] components:kCFCalendarUnitWeekOfYear | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:data.time];
[itemComps setCalendar:[NSCalendar currentCalendar]];
NSDateComponents *currComps = [[NSCalendar currentCalendar] components:kCFCalendarUnitWeekOfYear | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:prev.time];
[currComps setCalendar:[NSCalendar currentCalendar]];
if ([itemComps weekOfYear] == [currComps weekOfYear] && [itemComps month] == [currComps month] && [itemComps year] == [currComps year]) {//Same Week
sum += data.count;
} else if([itemComps weekOfYear] >= [currComps weekOfYear] && [itemComps month] == [currComps month] && [itemComps year] == [currComps year]) { //Next Week
Stat *stat = [[CSInstallStat alloc] init];
stat.time = [currComps date];
stat.count = sum;
stat.timeAccuracy = ENUMWeekly;
[weeklyData addObject:stat];
sum = 0;
sum += data.count;
prev = data;
} else {
prev = data;
}
}
self.weeklyData = weeklyData;
}
我的[MBCalendarKit](http://github.com/mosheberman/MBCalendarKit)庫包含NSCalendar和NSDate上的一些可能有用的類別。 – Moshe