11

在objectiveC中,我有一个NSArray,我们称之为它NSArray* largeArray,我想NSArray* smallArray用前x个对象获得一个新的

...或者如果 largeArray 已经是 size <= x 我只想要一个 largeArray 的副本。所以截断索引 x 之后的任何对象。

这种方法:

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

这个非常相似的问题的答案。但是如果 largeArray 已经很小,它会失败并出现错误。

4

3 回答 3

29

你可以这样做...

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

如果它小于 x,它将采用第一个 x 元素或整个数组。

如果 largeArray.count 是 100。

如果 x = 110,那么它将采用前 100 个结果。如果 x = 90,那么它将采用前 90 个结果。

是的,这行得通:D

于 2013-07-29T16:17:18.160 回答
1

Fogmeister 的答案非常好,但是在数组通常已经足够小的情况下,该答案的效率会稍低,因为它总是会复制。这是一个更有效的版本:

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

当数组已经在限制范围内时,此版本只会引用现有数组。

于 2015-03-29T18:03:49.267 回答
-5

这是明显的长期做法:

NSMutableArray* smallMutableArray;
if ([largeArray count] <= x) {
    smallMutableArray = [largeArray copy];
} else {
    for (int i=0; i<x; i++) {
       [smallMutableArray addObject:[largeArray objectAtIndex:i]];
    }
}
于 2013-07-29T16:27:45.340 回答