arrays - 快速获取 double 组的总和

标签 arrays core-data swift double reduce

我有一个字符串数字数组,我正在从核心数据中获取这些数字并将其转换为 double 值。完成此操作后,我想得到他们的总和,但出现错误。我试过这样:

override func viewDidLoad() {
    super.viewDidLoad()

        //CoreData
        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let managedContext : NSManagedObjectContext = appDelegate.managedObjectContext!
        var fetchRequest = NSFetchRequest(entityName: "Log")
        fetchRequest.returnsObjectsAsFaults = false;
        var results: NSArray = managedContext.executeFetchRequest(fetchRequest, error: nil)!

        if (results.count > 0) {
            for res in results {
                var totalWorkTimeInHoursString = res.valueForKey("totalWorkTimeInHoursString")  as String
                //get double value of strings array
                var totalWorkTimeInHoursNSString = NSString(string: totalWorkTimeInHoursString)
                var totalWorkTimeInHoursNSStringDoubleValue = totalWorkTimeInHoursNSString.doubleValue
                lastLogHoursWorked.text = "\(totalWorkTimeInHoursString) hours"
                totalHoursWorkedSum.text = "\(totalWorkTimeInHoursNSStringDoubleValue)"

                let sum = totalWorkTimeInHoursNSStringDoubleValue.reduce(0,+)
                    //throws an error saying 'Double' does not have a member named 'reduce'

                println(totalWorkTimeInHoursNSStringDoubleValue)
                    //lists the array of doubles in console successfully
                println(sum)
                    //checking to see if 'sum' works properly

        }
        }else {
            println("zero results returned, potential error")
        }
}

我处理得当吗?我错过了什么?

最佳答案

查看您的代码,我推断 results 是一个字典数组,每个字典都有一个 totalWorkTimeInHoursString 键,其值是 double 字的字符串表示形式.

我会使用一些函数式方法来解决它,使用 filtermapreduce:

if results.count > 0 {
    var res = results as [NSDictionary]

    var result = res.filter { $0["totalWorkTimeInHoursString"] is String }
        .map { ($0["totalWorkTimeInHoursString"] as NSString).doubleValue }
        .reduce (0, +)
}

代码的作用:

  • results数组转换为NSDictionary数组
  • 通过删除所有不具有 totalWorkTimeInHoursString 键或其对应值不是字符串的元素(字典)来过滤数组
  • 通过提取与 totalWorkTimeInHoursString 键对应的值,将数组的每个元素转换为 double,转换为 NSString,然后转换为 Double
  • 应用reduce 方法,传递+ 运算符对Double 的结果数组求和

这是我在 Playground 上测试我的解决方案的数据:

var results: NSArray = [
    ["totalWorkTimeInHoursString": "10.0"],
    ["totalWorkTimeInHoursString": "5.0"]
]

关于arrays - 快速获取 double 组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322031/

相关文章:

python - Cython 和数组

java - 将不重复的数字存储在数组中

iphone - Core Data 托管对象的生命周期

ios - 如何检查二进制数据(图像)是否已保存在核心数据中?

c++ - 更改函数以使用 vector 而不是数组

c++ - 如果不使用它,访问数组外的数据是否不正确?

objective-c - 跨模型获取的属性

python - Python 中的 Swift Optionals(或 Haskell 的 Maybe)?

ios - Interface Builder View 未显示

swift - MFMailComposeViewController setToRecipients 从设置文本字段附加字符串问题