【问题标题】:What is the best way to convert an array with NSStrings to NSDecimalNumber?将带有 NSStrings 的数组转换为 NSDecimalNumber 的最佳方法是什么?
【发布时间】:2015-05-01 22:11:36
【问题描述】:

我有一个NSArray,里面有 10 个NSStrings

myArray (
         @"21.32",
         @"658.47", 
         @"87.32"...
        )

将所有strings 转换为NSDecimalNumber 的最佳方法是什么?

【问题讨论】:

  • 您查看过NSDecimalNumber 的文档吗?你知道如何迭代数组吗?
  • 所以我必须用 for 循环来做?
  • 没有别的办法了吗?
  • @Avt 那么他们应该谈谈他们将如何用另一种语言做到这一点。这个问题几乎没有任何信息,并且看起来他甚至没有尝试过这个问题。
  • 嗯,它说让你的问题简短而切题。

标签: ios objective-c nsstring nsarray nsdecimalnumber


【解决方案1】:

NSArray 上的一个非常简单的类别将允许您使用 map,就像在其他语言中看到的那样

@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

现在你可以在你的情况下使用-map:

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

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

一个 NSMutableArray 就地变体可以是


@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];
}];

【讨论】:

    【解决方案2】:

    使用 for 循环会很简单:

    myArray (
             @"21.32",
             @"658.47", 
             @"87.32"...
            )
    
    NSMutableArray *numberArray = [NSMutableArray arrayWithCapacity: myArray.count];
    for (aString in myArray)
    {
      NSDecimalNumber *aNumber = [NSDecimalNumber decimalNumberWithString: aString];
      [numberArray addObject: aNumber];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2016-05-29
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多