Arrays 带算术运算符加法运算的Swift字符串数组

Arrays 带算术运算符加法运算的Swift字符串数组,arrays,swift,Arrays,Swift,我正在从RealmDB获取字符串格式的值。但是,此字符串包含算术格式的值,如下所示 let values = ["1/2","1/3","2/3","3/5","1/7"] 现在我的问题是,我必须返回整个数组的加法。我无法将其转换为双精度值,因为字符串本身包含算术运算符。如何对上面的字符串数组执行加法 我试着用nsexpression来做数学运算,但它给出的是nil值 let expn = NSExpression(format:"1/3") print(expn.expressionValu

我正在从RealmDB获取字符串格式的值。但是,此字符串包含算术格式的值,如下所示

let values = ["1/2","1/3","2/3","3/5","1/7"]
现在我的问题是,我必须返回整个数组的加法。我无法将其转换为双精度值,因为字符串本身包含算术运算符。如何对上面的字符串数组执行加法

我试着用nsexpression来做数学运算,但它给出的是nil值

let expn = NSExpression(format:"1/3")
print(expn.expressionValue(with: nil, context: nil))

您可以在数组上使用单个
flatMap
将分数
字符串
s转换为
Double
s。您只需使用
String.componenets(separatedBy:)
将字符串分成两部分,然后尝试将
字符串
部分转换为数字,如果成功,则进行除法

在转换为
Int
的过程中,会使用
默认值,以确保即使数组中的某些值不是正确的分数,应用程序也不会崩溃

let fractionStrings = ["1/2","1/3","2/3","3/5","1/7"]
let fractions = fractionStrings.flatMap({ fractionString -> Double? in
    let numbers = fractionString.components(separatedBy: "/")
    if let nominator = Int(numbers.first ?? ""), let denominator = Int(numbers.last ?? "") {
        return Double(nominator)/Double(denominator)
    } else {
        return nil
    }
})
print(fractions)
输出:

[0.5,0.3333333,0.6666666666,0.6,0.1428571428571428]


取每个字符串,将数字与运算符分开,进行实际运算,然后将所有结果相加。你试过什么?什么不起作用?@BhumaJ请参考此链接。问题编辑你是在数组中只有分数,还是在字符串中还有其他操作?@DávidPásztor我在数组中只有分数