首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSArray群枚举

NSArray群枚举
EN

Stack Overflow用户
提问于 2014-08-30 13:54:24
回答 3查看 112关注 0票数 0

使用Objective,是否可以按组遍历数组:例如:

NSArray *arr = 1,2,3,....100;

每10个物体做一件事,然后继续

因此:

对象0到9:对每个对象执行一些操作,在10°对象之后执行最后一个操作

然后对象10到19 :对每个对象做一些事情,在19°对象之后做最后一个动作

以此类推直到最后一个对象

谢谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-30 13:58:16

就像这样:

代码语言:javascript
复制
 for (int i = 0; i < arr.count; i++)
{
    [self doSomethingWithArray];

    if (i % 10 == 0)
        [self doSomethingElse];
}
票数 1
EN

Stack Overflow用户

发布于 2014-08-30 14:02:15

不,这是不可能的目标-C与内置的功能,符合您的确切描述。有一些简单的方法可以通过循环来完成,这与你的描述完全一致。

但是,如果您事先意识到您将进行这种类型的操作,请定义您自己的数据结构。创建一个NSObject子类,在其中定义项(您正在讨论的10个项)。然后,在数组中,您可以直接取出它的每个实例,其中包含您定义的NSObject

票数 1
EN

Stack Overflow用户

发布于 2014-08-30 16:43:03

“按组枚举”;如果您想要完全如愿以偿,您可以子类NSEnumerator

例如:

在应用程序代码中:

代码语言:javascript
复制
#import "NSArray+SubarrayEnumerator.h"

NSArray *arr = ...;

for(NSArray *grp in [arr subarrayEnumeratorEach:10]) {
   // do what you want.
}

NSArray+SubarrayEnumerator.h

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface NSArray (SubarrayEnumerator)
- (NSEnumerator *)subarrayEnumeratorEach:(NSUInteger)perPage;
@end

NSArray+SubarrayEnumerator.m

代码语言:javascript
复制
#import "NSArray+SubarrayEnumerator.h"

@interface _NSArraySubarrayEnumeratorEach : NSEnumerator
@property (assign, nonatomic) NSUInteger cursor;
@property (assign, nonatomic) NSUInteger perPage;
@property (strong, nonatomic) NSArray *src;
@end

@implementation NSArray (SubarrayEnumerator)
- (NSEnumerator *)subarrayEnumeratorEach:(NSUInteger)perPage {
    _NSArraySubarrayEnumeratorEach *enumerator = [[_NSArraySubarrayEnumeratorEach alloc] init];
    enumerator.perPage = perPage;
    enumerator.src = self;
    return enumerator;
}
@end

@implementation _NSArraySubarrayEnumeratorEach

- (id)nextObject {
    NSUInteger start = _cursor;
    if(start >= _src.count) {
        return nil;
    }
    NSUInteger count = MIN(_perPage, _src.count - start);
    _cursor += _perPage;
    return [_src subarrayWithRange:NSMakeRange(start, count)];
}

@end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25583101

复制
相关文章

相似问题

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