我有两个数组,一个是NSNumber的数组,另一个是NSDate的数组,我希望遍历这个数字数组,对于每个在某个标准范围内的数字--假设“大于5”--我将保存这个索引。然后迭代日期数组,我想获取相同的索引。
然后,我要在每组日期的第一个和最后一个日期之间找到NSTimeInterval,并将这些间隔相加。
例如:
NSArray *doubleArray = @[@3, @5, @6, @6, @7, @2, @8, @9, @2, @10];
NSArray *dateArray = @[dateA, dateB, dateC, dateD, dateE, dateF, dateG, dateH, dateI, dateJ];在doubleArray中的每个对象都超过5的情况下,我希望对象位于dateArray中相同的索引中。所以范围是2-4,6-7和10。我如何找到起始日期和结束日期之间的时间间隔,然后把它们加在一起进行累积和呢?对于单个项目,我可能只是将其设置为默认的间隔时间。在本例中,我需要[dateC timeIntervalSinceDate:dateE] + [dateG timeIntervalSinceDate:dateH] + defaultInterval
发布于 2015-07-22 21:45:47
这个问题的第一部分,获取第二个数组中与第一个数组中符合一定标准的对象对应的日期,是非常容易的。使用NSIndexSet从第一个数组中获取一个indexesOfObjectsPassingTest:
NSIndexSet * indexes = [doubles indexesOfObjectsPassingTest:^(NSNumber * num, NSUInteger idx, BOOL *stop){
return (BOOL)([num doubleValue] > 5);
}];在那里,您可以根据日期创建一个新的数组:
NSArray * selectedDates = [dates objectsAtIndexes:indexes];如果您想要添加每对选定日期,这是一个简单的成对迭代:
NSTimeInterval cumInterval = 0;
NSUInteger count = [selectedDates count];
for( NSUInteger i = 0; i < count - 1 /* stop before last object */; i++ ){
NSDate * firstDate = selectedDates[i];
NSDate * secondDate = selectedDates[i+1];
cumInterval += [firstDate timeIntervalSinceDate:secondDate];
}另一方面,如果您只想添加每个分组的第一个和最后一个(即从日期B到E的间隔以及从G到H的间隔),那么您可以枚举NSIndexSet,它实际上将索引存储为范围。
NSTimeInterval defaultInterval = ...;
NSTimeInterval __block cumInterval = 0;
[indexes enumerateRangesUsingBlock:^(NSRange range, BOOL *stop) {
if( range.length == 1 ){
cumInterval += defaultInterval;
return;
}
NSUInteger firstIdx = range.location;
NSUInteger secondIdx = range.location + range.length - 1;
NSDate * firstDate = dates[firstIdx];
NSDate * secondDate = dates[secondIdx];
cumInterval += [firstDate timeIntervalSinceDate:secondDate];
}];https://stackoverflow.com/questions/31571792
复制相似问题