In iOS voglio implementare la funzione mappa per NSArray. Questa è una funzione che viene applicata a ogni elemento dell'array. Qual è il modo migliore per implementarlo?NSArray. Come posso implementare la funzione Mappa?
Grazie,
Doug
In iOS voglio implementare la funzione mappa per NSArray. Questa è una funzione che viene applicata a ogni elemento dell'array. Qual è il modo migliore per implementarlo?NSArray. Come posso implementare la funzione Mappa?
Grazie,
Doug
È possibile utilizzare enumerateObjectsUsingBlock:
funzione del NSArray
.
[myArray enumerateObjectsUsingBlock:^(id x, NSUInteger index, BOOL *stop) {
// Body of the function
}];
dasblinkenlight si signore, abbiamo un vincitore. Funzionerà abbastanza bene. Grazie per questo. Saluti. – dugla
Perché questo è un vincitore. Una funzione mappa dovrebbe restituire un nuovo array in cui ogni elemento dell'originale è stato applicato dal blocco. enumerateObjectsUsingBlock restituisce void. –
@SaniElfishawy Quale OP chiama "mappa" si differenzia da una definizione più comune: voleva un meccanismo "foreach" per applicare la propria funzione (la prima parte della classica "mappa") ma non voleva raccogliere i risultati del trasformare (la seconda parte della funzionalità "mappa"). Ho risposto alla domanda in base alla descrizione dell'OP della funzionalità desiderata, ad esempio "Questa è una funzione che viene applicata a ogni elemento dell'array". – dasblinkenlight
Si sta cercando di applicare come mappa deve restituire un nuovo array con i valori trasformati.
Tuttavia è possibile aumentare NSArray con i metodi che si cercano creando una categoria personalizzata. Ecco due esempi - applicare e mappa:
@implementation NSArray (CMMap)
- (NSArray *) map:(id(^)(id obj))block {
NSMutableArray *a = @[].mutableCopy;
for (id o in self) {
id on = block(o);
if (!on) {
NSLog(@"NSArray::map() - object returned by block is nil!");
abort();
}
[a addObject: on];
}
return [NSArray arrayWithArray: a];
}
- (void) apply:(void(^)(id obj))block {
for (id o in self) {
block(o);
}
}
@end
Se si utilizza Objective-C, si può semplicemente utilizzare questi metodi:
- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullable id)argument;
Per esempio:
[array makeObjectsPerformSelector:@selector(doSomething)];
mappa è una trasforma da una cosa all'altra ... stai cercando "foreach", non la mappa ... detto questo, la risposta accettata è corretta. –