【问题标题】:How get the total sum of NSNumber's from a NSArray?如何从 NSArray 中获取 NSNumber 的总和?
【发布时间】:2012-06-25 15:37:35
【问题描述】:

我有一个大的NSArray 包含NSNumbers3, 4, 20, 10, 1, 100, 等等...

如何将所有这些 NSNumbers (3 + 4 + 20 + 10 + 1 + 100 + etc...) 的总和作为一个总数 NSInteger

谢谢!

【问题讨论】:

    标签: iphone objective-c nsarray nsnumber nsinteger


    【解决方案1】:

    你可以用这个:

    NSArray* numbers = //array of numbers
    NSNumber* sum = [numbers valueForKeyPath: @"@sum.self"];
    

    【讨论】:

    • 这是最优雅的解决方案。这里的文档:developer.apple.com/library/ios/ipad/#documentation/cocoa/…
    • 这绝对是最优雅的解决方案。不过有个小问题。如果数组中的元素之一是 NSNull,它就会崩溃。
    • 还记录了使用doubles 进行所有算术运算。因此,五年后,随着 64 位运行时和 NSInteger 现在的大小与 double 相同,当数字很大时可能会丢失精度。
    • 有谁知道如何在 Swift 中执行那些 @sum.self 吗?
    • 如果数组有 1000 个数字,这也会导致性能不佳。最好改用快速枚举
    【解决方案2】:
    NSInteger sum = 0;
    for (NSNumber *num in myArray) {
      sum += [num intValue];
    }
    

    【讨论】:

      【解决方案3】:
      long long sum = ((NSNumber*)[array valueForKeyPath: @"@sum.longLongValue"]).longLongValue;
      

      【讨论】:

      • valueForKeyPath: 返回一个对象,而不是一个整数。
      【解决方案4】:

      遍历数组

      int count = [array count];
      NSInteger sum = 0;
      for (int i = 0; i < count; i++) {
          sum += [[array objectAtIndex:i] integerValue];
      }
      

      【讨论】:

        【解决方案5】:
        [[numbersArray valueForKeyPath:@"@sum.self"] integerValue]
        

        【讨论】:

          【解决方案6】:
          int total = 0;
          for (NSNumber *number in array)
          {
            total += [number intValue];
          }
          

          希望对你有帮助

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多