Изменить размер NSArray программно
Я пытался выяснить, возможно ли программно изменить размер NSArray
, используя код, похожий на этот:
NSArray *resize = [NSArray arrayResized:oldarray size:10];
Какой бы новый NSArray
(Не NSMutableArray
если это возможно), что имеет элементы после окончания oldarray
дополненный [NSNull null]
,
3 ответа
Решение
Поскольку объекты 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
Хотя ваш вопрос заслуживает ответа "Что вы на самом деле пытаетесь сделать?", Вот возможное решение:
@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