开发者

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

开发者 https://www.devze.com 2023-03-23 04:36 出处:网络
What is an easy way to break an NSArray with 4000 objects in it into multiple arrays开发者_开发知识库 with 30 objects each?

What is an easy way to break an NSArray with 4000 objects in it into multiple arrays开发者_开发知识库 with 30 objects each?

So right now I have an NSArray *stuff where [stuff count] = 4133.

I want to make a new array that holds arrays of 30 objects. What is a good way to loop through, breaking *stuff into new 30-object arrays, and placing them inside of a larger array?

Obviously the last array won't have 30 in it (it will have the remainder) but I need to handle that correctly.

Make sense? Let me know if there is an efficient way to do this.


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;
        }
0

精彩评论

暂无评论...
验证码 换一张
取 消