indicesOfObjectsPassingTest:|一旦找到索引如何检查它们是否是顺序的?

时间:2016-03-13 04:18:42

标签: ios objective-c

我正在成功使用indicesOfObjectsPassingTest来获取我需要的索引。

使用找到的索引,我想检查是否有任何索引是顺序的。如果他们是我想获得该序列中的第一个和序列中的最后一个。

        NSMutableArray *domesticSetResult = [[NSMutableArray alloc]init];
        domesticSetResult = nil;

        NSMutableArray *matches = [NSMutableArray array];

        NSIndexSet *domesticIndex = [self.days indexesOfObjectsPassingTest: ^(id obj, NSUInteger idx, BOOL *stop)
                              {
                                  if ([obj isDomestic])
                                      return YES; // found a match, keep going
                                  else
                                      return NO; // keep looking
                              } ];

        [domesticIndex enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
            [matches addObject:[self.days objectAtIndex:idx]];
        }];
        NSLog(@"\n\nDomestic indexes: %@\n\n", domesticIndex);

作为示例,日志生成

国内指数:[指数数量:3(2个区间),指数:(0 3-8)]

索引0只有1个顺序,所以我希望它返回。 索引3-8我想返回3和8

我可以枚举索引,但不知道如何检查索引是否按顺序排列,只是获取每个序列开头和结尾的索引。

1 个答案:

答案 0 :(得分:0)

NSMutableIndexSet *s = [NSMutableIndexSet indexSetWithIndex:0]; [s addIndex:3]; [s addIndex:4]; [s addIndex:5]; [s addIndex:6]; [s addIndex:7]; [s addIndex:8]; NSMutableIndexSet *s2 = [[NSMutableIndexSet alloc] init]; [s enumerateRangesUsingBlock:^(NSRange range, BOOL *stop) { NSLog(@"%@", NSStringFromRange(range)); [s2 addIndex:range.location]; if (range.length > 1) { [s2 addIndex:range.location + range.length - 1]; } }]; NSLog(@"%@", s2); 为您完成工作。

为简单起见,此代码构造了第一个索引集,但它很容易适应您想做的任何事情。

public static <E extends Comparable<E>> E minimum(ArrayList<E> list) {
    return list.stream().min(Comparator.naturalOrder()).orElse(null);
}

最后的日志将打印3个索引:0,3,8