How do I get the first X elements of an unknown size NSArray?

后端 未结 3 859
清酒与你
清酒与你 2021-02-20 01:59

In objectiveC I have an NSArray, let\'s call it NSArray* largeArray, and I want to get a new NSArray* smallArray with just the first x objects

相关标签:
3条回答
  • 2021-02-20 02:39

    Here's the obvious long-hand way of doing it:

    NSMutableArray* smallMutableArray;
    if ([largeArray count] <= x) {
        smallMutableArray = [largeArray copy];
    } else {
        for (int i=0; i<x; i++) {
           [smallMutableArray addObject:[largeArray objectAtIndex:i]];
        }
    }
    
    0 讨论(0)
  • 2021-02-20 02:59

    You could do this...

    NSArray *smallArray = [largeArray subarrayWithRange:NSMakeRange(0, MIN(x, largeArray.count))];
    

    That will take the first x elements or the full array if it's smaller than x.

    If largeArray.count is 100.

    If x = 110 then it will take the first 100 results. If x = 90 then it will take the first 90 results.

    Yep, that works :D

    0 讨论(0)
  • 2021-02-20 02:59

    Fogmeister's answer is perfectly good, but, in situations where the array is often already small enough, that answer will be mildly inefficient since it always makes a copy. Here is a more efficient version:

    NSAarray *smallArray = largeArray;
    if (smallArray.count > MAX_NUM_ITEMS)
        smallArray = [smallArray subarrayWithRange:NSMakeRange(0, MAX_NUM_ITEMS)];
    

    When the array is already within the limit this version will just make a reference to the existing array.

    0 讨论(0)
提交回复
热议问题