Какой простой способ разбить NSArray с 4000+ объектами в нем на несколько массивов по 30 объектов в каждом? - PullRequest
15 голосов
/ 28 июля 2011

Какой простой способ разбить NSArray с 4000 объектами в нем на несколько массивов по 30 объектов в каждом?

Итак, сейчас у меня есть NSArray * вещи, где [stuff count] = 4133.

Я хочу создать новый массив, содержащий массивы из 30 объектов.Каков хороший способ перебрать, разбить * вещи на новые массивы из 30 объектов и поместить их внутрь большего массива?

Очевидно, что в последнем массиве не будет 30 (он будет иметьостаток) но мне нужно правильно с этим справиться.

Имеет смысл?Дайте мне знать, если есть эффективный способ сделать это.

Ответы [ 3 ]

49 голосов
/ 28 июля 2011

С макушки головы, что-то вроде (не проверено):

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

MIN(30, i) заботится о последнем массиве, который не обязательно содержит 30 элементов.

2 голосов
/ 05 декабря 2014
            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];
            }
0 голосов
/ 06 декабря 2016

Преобразовал ответ @samvermette в 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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...