2010-10-24 24 views
4

J'ai essayé de savoir s'il est possible de redimensionner programme un NSArray, en utilisant un code similaire à ceci:Redimensionner NSArray programme

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

Ce qui serait une nouvelle NSArray (Pas NSMutableArray s'il est possible) qui a les éléments après la fin de oldarray rembourré avec [NSNull null].

+1

Pourquoi êtes-vous contre l'utilisation d'un NSMutableArray qui fait exactement ce que vous décrivez? Vous pouvez créer une fonction qui renvoie une copie de votre NSArray avec une taille plus grande, mais quel serait le point? – ChrisOPeterson

Répondre

2

Étant donné que les objets NSArray sont immuables (ils ne peuvent pas modifier les objets qu'ils contiennent), il est inutile d'ajuster la capacité de NSArrays.

Vous pouvez cependant écrire une catégorie qui a fait quelque chose le long des lignes de ce que vous voulez:

@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 
+2

Oh oui, j'utilisais le mauvais objet pour la mauvaise situation, désolé :) –

+0

(Parmi d'autres questions) Ce code déclencherait une exception si newSize est plus grand que le compte du récepteur ... – retainCount

+0

@retainCount, Par tous les moyens , S'il vous plaît, expliquez. –

0

Vous voulez NSPointerArray.

+1

NSPointerArray ??? –

+1

NSPointerArray est un peu comme NSMutableArray mais il est correctement conçu pour être redimensionné via le message setCount:. Semble être exactement ce que vous cherchez. J'ai ajouté un lien vers les docs. –

+0

À noter que ce n'est pas disponible sur iOS, si quelqu'un voulait essayer ça. – Felixyz

2

Bien que votre question mérite un « Qu'est-ce que vous essayez de le faire vraiment? », Voici une solution:

@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