首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据另一个数组中的值选择的NSTimeInterval中的NSDates累积值

根据另一个数组中的值选择的NSTimeInterval中的NSDates累积值
EN

Stack Overflow用户
提问于 2015-07-22 19:00:23
回答 1查看 169关注 0票数 0

我有两个数组,一个是NSNumber的数组,另一个是NSDate的数组,我希望遍历这个数字数组,对于每个在某个标准范围内的数字--假设“大于5”--我将保存这个索引。然后迭代日期数组,我想获取相同的索引。

然后,我要在每组日期的第一个和最后一个日期之间找到NSTimeInterval,并将这些间隔相加。

例如:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 21:45:47

这个问题的第一部分,获取第二个数组中与第一个数组中符合一定标准的对象对应的日期,是非常容易的。使用NSIndexSet从第一个数组中获取一个indexesOfObjectsPassingTest:

代码语言:javascript
运行
复制
NSIndexSet * indexes = [doubles indexesOfObjectsPassingTest:^(NSNumber * num, NSUInteger idx, BOOL *stop){
                            return (BOOL)([num doubleValue] > 5);
                        }];

在那里,您可以根据日期创建一个新的数组:

代码语言:javascript
运行
复制
NSArray * selectedDates = [dates objectsAtIndexes:indexes];

如果您想要添加每对选定日期,这是一个简单的成对迭代:

代码语言:javascript
运行
复制
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,它实际上将索引存储为范围。

代码语言:javascript
运行
复制
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];
}];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31571792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档