Il existe également cette variante, si votre tableau d'origine contient des objets clé-valeur à partir desquels vous ne souhaitez sélectionner qu'une propriété (qui peut être sérialisée sous forme de chaîne):
@implementationNSArray(itertools)-(NSMutableString*)stringByJoiningOnProperty:(NSString*)property separator:(NSString*)separator
{NSMutableString*res =[@"" mutableCopy];
BOOL firstTime = YES;for(NSObject*obj in self){if(!firstTime){[res appendString:separator];}else{
firstTime = NO;}
id val =[obj valueForKey:property];if([val isKindOfClass:[NSStringclass]]){[res appendString:val];}else{[res appendString:[val stringValue]];}}return res;}@end
Il y a une fuite de mémoire dans votre code, mutableCopy conserve l'objet qu'il est en train de copier, vous devrez donc renvoyer [res autorelease] à la fin. De plus, il n'y a aucune raison de faire une copie mutablecopy au lieu de simplement créer une chaîne mutablestring dès le départ.
thewormsterror
@thewormsterror: j'ai oublié de mentionner que ce code était pour ARC. En outre, l'appel mutablecopy est la convention objective-c moderne pour créer une version mutable d'objets utilisant @ -syntax (comme [@ [] mutablecopy] pour un nsarray mutable). Je ne sais pas quelle différence cela fait en termes de performances.
Réponses:
C'est l'inverse de
-[NSString componentsSeparatedByString:]
.la source
-componentsJoinedByString:
sur NSArray devrait faire l'affaire.la source
Il existe également cette variante, si votre tableau d'origine contient des objets clé-valeur à partir desquels vous ne souhaitez sélectionner qu'une propriété (qui peut être sérialisée sous forme de chaîne):
la source