[Solved] What is the best way to convert an array with NSStrings to NSDecimalNumber?


A very simple Category on NSArray will allow you to use map as seen in other languages

@interface NSArray (Functional)

-(NSArray *)map:(id (^) (id element))mapBlock;

@end

@implementation NSArray (Functional)

-(NSArray *)map:(id (^)(id))mapBlock
{
    NSMutableArray *array = [@[] mutableCopy];
    for (id element in self) {
        [array addObject:mapBlock(element)];
    }
    return [array copy];
}


@end

Now you can use -map: in your case like

NSArray *array = @[@"21.32",
                   @"658.47",
                   @"87.32"];

array = [array map:^id(NSString *element) {
    return [NSDecimalNumber decimalNumberWithString:element];
}];

A NSMutableArray in-place variant could be


@interface NSMutableArray (Functional)
-(void)map:(id (^) (id element))mapBlock;
@end

@implementation NSMutableArray (Functional)

-(void)map:(id (^)(id))mapBlock
{
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        self[idx] = mapBlock(obj);
    }];
}

@end

NSMutableArray *array = [@[@"21.32",
                           @"658.47",
                           @"87.32"] mutableCopy];

[array map:^id(NSString *element) {
   return [NSDecimalNumber decimalNumberWithString:element];
}];

solved What is the best way to convert an array with NSStrings to NSDecimalNumber?