我尝试过滤我的数组并总结金额。它有效,但当数量超过999.99时,它将变为零。有没有办法增加双重类型的数量限制?有可能吗?
最大数量:100,000,000.00
incomeFilter = record.filter { $0.recordtype!.contains("收入") && $0.createdAt! == recordItem.createdAt!}
let incomeSum = incomeFilter.map{Double($0.amount!.dropFirst()) ?? 0.00}.reduce(0, +)
//[9.99, nil]
除此之外,我还试图将其转换为数字。
但我发现我无法使用.dropFirst()
功能。我删除它后出现此错误Cannot convert value of type 'String.SubSequence' (aka 'Substring') to expected argument type 'String'
,它显示另一个错误Cannot invoke 'reduce' with an argument list of type '(Int, _)'
如何解决?
let fmt = NumberFormatter()
fmt.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale!
fmt.maximumFractionDigits = 4
fmt.minimumFractionDigits = 4
let incomeSum = incomeFilter.map{fmt.number(from: $0.amount!) ?? 0.00}.reduce(0, +)
答案 0 :(得分:0)
实际上,dropFirst()
和reduce(_:_)
都应该使用此语法。问题中的代码是真正的代码吗?
这适用于游乐场
let array = ["\n1.2", "\n3.5", "\n6.7"]
let incomeSum = array.map{Double($0.dropFirst()) ?? 0.00}.reduce(0, +)
print(incomeSum) // 11.4
要修复无法将类型'String.SubSequence'(又名'Substring')的值转换为预期的参数类型'String'错误,请从结果中创建一个新字符串(例如{ {1}})
我不明白第二个错误 - 表示类型不匹配 - 因为文字String($0.amount!.dropFirst())
被视为0
和Int
答案 1 :(得分:0)
您是否想要总结每个数组的第一个元素(这是一个字符串?)。如果是这样,这个游乐场将展示如何:
import UIKit
let records: [[String]] = [(100..<103).map{"\($0)"},
(200..<203).map{"\($0)"},
(300..<303).map{"\($0)"}]
print(records)
let sum = records.flatMap {$0.first}.flatMap{Double($0)}.reduce(0, +)
print(sum)
如果第一个元素存在,第一个平面地图会生成一个包含所有数组中第一个元素的字符串数组。
如果可以转换字符串,第二个平面地图会将字符串转换为double。
然后,reduce会增加所有内容。