以编程方式调整NSArray的大小

时间:2010-10-24 00:11:15

标签: objective-c resize nsarray categories

我一直试图弄清楚是否可以使用与此类似的代码以编程方式调整NSArray的大小:

NSArray *resize = [NSArray arrayResized:oldarray size:10];

NSArray填充NSMutableArray后,有oldarray(如果可能的话,不是[NSNull null])会有哪些元素。

3 个答案:

答案 0 :(得分:2)

由于NSArray对象是不可变的(不能更改它们包含的对象),因此调整NSArrays的容量是没有用的。

但是,您可以编写一个类似于您想要的内容的类别:

@interface NSArray (Resizing) 

-(NSArray *) resize:(NSInteger) newSize;

@end

@implementation NSArray (Resizing)

-(NSArray *) resize:(NSInteger) newSize {
   int size = (newSize > [self count]) ? self.count : newSize; 
   NSMutableArray *array = [NSMutableArray arrayWithCapacity:size];
   for(int i = 0; i < size; i++) 
      [array addObject:[self objectAtIndex:i]];
   return [NSArray arrayWithArray:array];
}

@end

答案 1 :(得分:2)

虽然你的问题值得“你真正想做什么?”,但这是一个可能的解决方案:

@interface NSArray (RCArrayAdditions)
- (NSArray *)arrayByAppendingWithNulls:(NSUInteger)numberOfAppendedNulls;
@end

@implementation NSArray (RCArrayAdditions)
- (NSArray *)arrayByAppendingWithNulls:(NSUInteger)numberOfAppendedNulls {
    NSMutableArray *expandedArray = [self mutableCopy];
    for (NSUInteger i = 0; i < numberOfAppendedNulls; i ++) {
        [expandedArray addObject:[NSNull null]];
    }
    return expandedArray;
}
@end

答案 2 :(得分:0)

你想要NSPointerArray