What is an easy way to break an NSArray with 4000+ objects in it into multiple arrays with 30 objects each?

匆匆过客 提交于 2019-11-27 04:25:29
samvermette

Off the top of my head, something like (untested):

NSMutableArray *arrayOfArrays = [NSMutableArray array];

int itemsRemaining = [stuff count];
int j = 0;

while(itemsRemaining) {
    NSRange range = NSMakeRange(j, MIN(30, itemsRemaining));
    NSArray *subarray = [stuff subarrayWithRange:range];
    [arrayOfArrays addObject:subarray];
    itemsRemaining-=range.length;
    j+=range.length;
}

The MIN(30, i) takes care of that last array that won't necessarily have 30 items in it.

            NSMutableArray *arrayOfArrays = [NSMutableArray array];
            int batchSize = 30;

            for(int j = 0; j < [stuff count]; j += batchSize) {

                NSArray *subarray = [stuff subarrayWithRange:NSMakeRange(j, MIN(batchSize, [stuff count] - j))];
                [arrayOfArrays addObject:subarray];
            }

Converted the answer of @samvermette to SWIFT 3

        var arrayOfArraySlices = [ArraySlice<CBOrder>]() // array of array slices

        var itemsRemaining = orderArray.count
        var j = 0

        while itemsRemaining > 0 {
            let range = NSRange(location: j, length: min(20, itemsRemaining));
            let arraySlice = orderArray[range.location..<range.location + range.length]
            arrayOfArraySlices.append(arraySlice)
            itemsRemaining -= range.length;
            j += range.length;
        }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!