我有一个字符串数字数组,我正在从核心数据中获取这些数字并将其转换为 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 字的字符串表示形式.
我会使用一些函数式方法来解决它,使用 filter
、map
和 reduce
:
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/