首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历NSArray并以12组的形式存储项

遍历NSArray并以12组的形式存储项
EN

Stack Overflow用户
提问于 2014-03-11 06:57:19
回答 2查看 140关注 0票数 1

我已经尽力在这件事上做了我的尽职调查,但总是不够。我有一个已经分析过的对象数组,我想迭代这些对象并存储它们。假设数组是144个对象(只是一个例子),我希望将其存储在12组中,以便在tableview单元格中显示。实际上,在数组中的这12个对象中,我可能只在单元格中显示3-4,而在细节视图中显示所有这些对象。

为了帮助解释我的意思(对不起,如果在这一点上没有意义的话),下面是我得到的一些获取数据的代码。

代码语言:javascript
复制
NSMutableArray *objectsArray = [[NSMutableArray alloc] initWithCapacity:0];

for (TFHppleElement *element in objectsNode) {
    PHSingleEvent *singleEvent = [[PHSingleEvent alloc]init];
    [objectsArray addObject:singleEvent];

    singleEvent.title = [[element firstChild] content];
}

这会拉下整个对象数组(一个未知的数目,但肯定是12的倍数)。我将如何一次将12个对象存储到单个事件中?

我可以用

代码语言:javascript
复制
PHSingleEvent *firstObject = [objectsArray objectAtIndex:0] // this one is null
PHSingleEvent *eventStartTime = [objectsArray objectAtIndex:1];
PHSingleEvent *eventEndTime = [objectsArray objectAtIndex:2];
...
PHSingleEvent *lastObject = [objectsArray objectAtIndex:11];

NSLog(@"single object of event: %@", eventStartTime.startTime);
NSLog(@"single object of event: %@", eventEndTime.endTime);

etc...

但是数组总是超过12,我想遍历每12个对象并存储这些值,最好是以字符串的形式显示在单元格和细节视图中。

有什么想法吗?

提前谢谢,如果我不清楚的话,我会在这里回答任何问题。

结果表明,C.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-11 07:14:33

使用for循环如何?假设每个事件对象都有12个子对象(即索引0- 11),则可以使用mod函数来存储它。例如:

代码语言:javascript
复制
NSMutableArray *eventArray = [[NSMutableArray alloc] init];
for(int i=0; i<objectArray.count/12;i++){
    int offset = 12*i;
    NSMutableArray *event = [objectsArray subarrayWithRange:NSMakeRange(offset, 12)];
    [eventArray addObject:event];
}

所以现在eventArray有n个数组,每一个都是12个对象(其中n=总计objects / 12 )

编辑:更好的方法是使用NSDictionary。例如:

代码语言:javascript
复制
NSMutableArray *eventArray = [[NSMutableArray alloc] init];
    for(int i=0; i<objectArray.count/12;i++){
        int offset = 12*i;
        NSDictionary *tempDict = [[NSDictionary alloc] initWithObjectsAndKeys: [objectsArray objectAtIndex: offset], @"eventStartTime", [objectsArray objectAtIndex: offset+1], @"eventEndTime", ..., [objectsArray objectAtIndex: offset+11, @"lastObject",nil]; 
        [eventArray addObject:tempDict];
    }

然后,您可以使用类似的语句访问上述每个对象,如下所示:

代码语言:javascript
复制
PHSingleEvent *eventStartTime = [[eventArray objectAtIndex: index] objectForKey: @"eventStartTime"];

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2014-03-11 07:36:44

此方法将根据您指定的组大小返回一个较小数组的数组。

代码语言:javascript
复制
- (NSMutableArray*)makeGroupsOf:(int)groupSize fromArray:(NSArray*)array
{
    if (!array || array.count == 0 || groupSize == 0)
    {
        return nil;
    }

    NSMutableArray *bigGroup = [[NSMutableArray alloc] init];

    for (int i = 0; i < array.count; )
    {
        NSMutableArray *smallGroup = [[NSMutableArray alloc] initWithCapacity:groupSize];
        for (int j = 0; j < groupSize && i < array.count; j++)
        {
            [smallGroup addObject:[array objectAtIndex:i]];
            i++;
        }
        [bigGroup addObject:smallGroup];
    }
    return bigGroup;
}

不过,我还没测试过什么。在你有了大数组和更小的数组之后,这仅仅是用子数组中任意数量的对象填充每个单元格的问题。

注意:当数组为空、空或组大小为0时,您可能希望以不同的方式处理这些情况。

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

https://stackoverflow.com/questions/22318524

复制
相关文章

相似问题

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