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;
}
精彩评论