Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-将数组中的值转换为双精度或浮点值_Ios_Arrays_String_Swift_Double - Fatal编程技术网

Ios Swift-将数组中的值转换为双精度或浮点值

Ios Swift-将数组中的值转换为双精度或浮点值,ios,arrays,string,swift,double,Ios,Arrays,String,Swift,Double,我有一个数组,其中的值是字符串(但所有字符串都是1.0、2.0等值)。我正在尝试将这些字符串转换为双精度或浮点型,以便将它们全部相加。如何在swift中执行此操作?如果您确定所有数组都是字符串,则可以直接将字符串转换为float或double let x = ["1.0", "1.5", "2.0"] print(x.map {Double($0)!}) let numberArray:Array = ["1.0","2.0","3.0"] let stringFromArray = numb

我有一个数组,其中的值是字符串(但所有字符串都是1.0、2.0等值)。我正在尝试将这些字符串转换为双精度或浮点型,以便将它们全部相加。如何在swift中执行此操作?

如果您确定所有数组都是字符串,则可以直接将字符串转换为float或double

let x = ["1.0", "1.5", "2.0"]
print(x.map {Double($0)!})
let numberArray:Array = ["1.0","2.0","3.0"]
let stringFromArray = numberArray[0]
let floatFromString = Float(stringFromArray)
let doubleFromString = Double(stringFromArray)

更新:Xcode 8.3.2•Swift 3.1

extension Collection where Iterator.Element == String {
    var doubleArray: [Double] {
        return flatMap{ Double($0) }
    }
    var floatArray: [Float] {
        return flatMap{ Float($0) }
    }
}
extension Collection where Iterator.Element == String {
    var convertToDouble: [Double] {
        return compactMap{ Double($0) }
    }
    var convertToFloat: [Float] {
        return compactMap{ Float($0) }
    }
}

用法:

let strNumbersArray = ["1.5","2.3","3.7","4.5"]   // ["1.5", "2.3", "3.7", "4.5"]
let doublesArray = strNumbersArray.doubleArray    // [1.5, 2.3, 3.7, 4.5]
let floatsArray = strNumbersArray.floatArray      // [1.5, 2.3, 3.7, 4.5]
let total = doublesArray.reduce(0, +)     // 12
let average = total / Double(doublesArray.count)  // 3
let strNumbersArray:[Any?] = ["1.5","2.3","3.7","4.5", nil]   // [{Some "1.5"}, {Some "2.3"}, {Some "3.7"}, {Some "4.5"}, nil]
let doublesArray = strNumbersArray.doubleArrayFromStrings    // [1.5, 2.3, 3.7, 4.5]
let floatsArray = strNumbersArray.floatArrayFromStrings      // [1.5, 2.3, 3.7, 4.5]
let total = doublesArray.reduce(0, +)     // 12
let average = total / Double(doublesArray.count)  // 3
如果你有一个数组?其中需要将所有字符串从可选任意转换为双精度:

extension Collection where Iterator.Element == Any? {
    var doubleArrayFromStrings: [Double] {
        return flatMap{ Double($0 as? String ?? "") }
    }
    var floatArrayFromStrings: [Float] {
        return flatMap{ Float($0 as? String ?? "") }
    }
}
用法:

let strNumbersArray = ["1.5","2.3","3.7","4.5"]   // ["1.5", "2.3", "3.7", "4.5"]
let doublesArray = strNumbersArray.doubleArray    // [1.5, 2.3, 3.7, 4.5]
let floatsArray = strNumbersArray.floatArray      // [1.5, 2.3, 3.7, 4.5]
let total = doublesArray.reduce(0, +)     // 12
let average = total / Double(doublesArray.count)  // 3
let strNumbersArray:[Any?] = ["1.5","2.3","3.7","4.5", nil]   // [{Some "1.5"}, {Some "2.3"}, {Some "3.7"}, {Some "4.5"}, nil]
let doublesArray = strNumbersArray.doubleArrayFromStrings    // [1.5, 2.3, 3.7, 4.5]
let floatsArray = strNumbersArray.floatArrayFromStrings      // [1.5, 2.3, 3.7, 4.5]
let total = doublesArray.reduce(0, +)     // 12
let average = total / Double(doublesArray.count)  // 3

Swift 5.1

extension Collection where Iterator.Element == String {
    var doubleArray: [Double] {
        return flatMap{ Double($0) }
    }
    var floatArray: [Float] {
        return flatMap{ Float($0) }
    }
}
extension Collection where Iterator.Element == String {
    var convertToDouble: [Double] {
        return compactMap{ Double($0) }
    }
    var convertToFloat: [Float] {
        return compactMap{ Float($0) }
    }
}

如何使用示例

let String_Array = ["1.5","2.3","3.7","4.5"]       // ["1.5", "2.3", "3.7", "4.5"]
let Double_Array = String_Array.convertToDouble    // [1.5, 2.3, 3.7, 4.5]
let Float_Array = String_Array.convertToFloat.     // [1.5, 2.3, 3.7, 4.5]

或者您可以这样做

let numArray = ["1.0","2.0","3.0"]
let stringFromArray = numberArray[0]
let floatFromString = Float(stringFromArray)
let doubleFromString = Double(stringFromArray)


我得到一个错误:
类型“AnyObject?”不符合协议“StringType”
此扩展用于字符串数组。你能编辑你的问题并添加原始的输入源代码吗?这很奇怪。我正在从parse下载数组,其中的所有对象都应该是字符串:
var newarray=[object.objectForKey(“times”)]
你需要转换为[String]@JaganrajPalanivel,更新为Swift 3.1,数组中的Any代替AnyObject
x.map{Double($0)?0}
在展开时避免nil;)或者使用
compactMap