【问题标题】:Sum an Array - Objective-C对数组求和 - Objective-C
【发布时间】:2011-01-10 04:50:32
【问题描述】:

我刚刚开始,我正在寻找一种简单的方法来求和一个简单的数组。我已经阅读了关于键值编码的苹果开发者网站,但我不明白如何将其应用于我的数组,或者这是否是总结这一点的适当方式。

我的键值编码的绊脚石是 .keypathToProperty - 我可以理解您需要在 2D 数组中进一步引用,但它们不显示数组代码,只显示行标题的键路径所以我还想不通。

NSMutableArray *numArray = [NSMutableArray arrayWithCapacity:4];
    [numArray addObject:num1];
    [numArray addObject:num2];  
    [numArray addObject:num3];
    [numArray addObject:num4];

感谢您的回复!

谢谢

格雷厄姆

【问题讨论】:

    标签: objective-c arrays sum


    【解决方案1】:

    自动的方法是:

    NSNumber * sum = [numArray valueForKeyPath:@"@sum.self"];
    

    但如果您刚刚开始,我建议您避免使用集合键路径运算符并采用更简单的方法:

    double sum = 0;
    for (NSNumber * n in numArray) {
      sum += [n doubleValue];
    }
    

    【讨论】:

    • 天啊,我不知道@sum.self,哇,我每天都在提醒我有多少我不知道。
    • 有趣的是,还有像“max.self”、“min.self”这样的键......很棒的解决方案..
    【解决方案2】:

    Swift 3:(Dave DeLong's method 转换):

    let sum = (numArray as AnyObject).value(forKeyPath:"@sum.self") as! Double
    

    这应该与它的 Objective-C 对应物以类似的方式工作。

    【讨论】:

    • 我知道您将其作为使用键路径的示例,但对于任何较新的 Swift 读者,您可能希望使用 reduce! let sum = numArray.reduce(0) { $0 + $1 }
    • @MikeSprague:我并不反对你认为哪个更合适,尽管我对你为什么不应该提出替代方法的推理感兴趣。我喜欢这种方法的原因是,对于涉及的代码量,它对于包含混合整数和字符串值的数组非常有效。
    【解决方案3】:

    在 Swift 4 中:

    let array = [1,2,3,5]
    let sum = array.reduce(0, {$0 + $1})
    print(sum)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多