разбить NSArray на группы меньших NSArrays для подкачки - PullRequest
3 голосов
/ 29 июля 2011

У меня есть NSArray, скажем, 100 NSManagedObjects, и мне нужно разделить его на NSArray, который содержит 10 NSArray объектов, каждый из которых содержит 10 тезисов NSManagedObjects, как бы мне этого достичь?

Я собираюсь сделать пейджинг, и это будет хорошо работать для меня.

Ответы [ 4 ]

5 голосов
/ 29 июля 2011

Как вы получаете эти NSManagedObjects? Если вы используете NSFetchRequest, вы можете сохранить его и получать только 10 результатов за раз.

3 голосов
/ 01 ноября 2013

Вот мой код:

[объект splitArrayWithArray: arrayWith100Objects rangeNumber: 10];

- (NSArray*) splitArrayWithArray:(NSArray*)rawArray rangeNumber:(int)rangeNumber{
    int totalCount = rawArray.count;
    int currentIndex = 0;

    NSMutableArray* splitArray = [NSMutableArray array];

    while (currentIndex<totalCount) {
        NSRange range = NSMakeRange(currentIndex, MIN(rangeNumber, totalCount-currentIndex));
        NSArray* subArray = [rawArray subarrayWithRange:range];
        [splitArray addObject:subArray];
        currentIndex +=rangeNumber;
    }
    return splitArray;
}
2 голосов
/ 29 июля 2011

Что-то в этом духе должно работать, а не разбивать его на отдельные массивы

//make a new range for each page
NSRange myRange = NSMakeRange(10, 10);
NSArray * myArray = [NSArray array];

//...pass both into a function
for (int i = myRange.location; i < myRange.location + myRange.length; i++) {
    //stuff with the array elements
    [[myArray objectAtIndex:i] doSomething];
}
1 голос
/ 15 сентября 2013

Это не одна строка, но это разделит массив на страницы:

NSArray *arrayToSplit = ...

int pageSize = 50;
NSMutableArray *arrayOfPages = [NSMutableArray new];

NSRange range = NSMakeRange(0, pageSize);

while (range.location < arrayToSplit.count) {
    if (range.location + range.length >= arrayToSplit.count)
        range.length = arrayToSplit.count - range.location;

    [arrayOfPages addObject:[arrayToSplit objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]];

    range.location += range.length;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...