循环修改数组

时间:2019-01-27 06:58:18

标签: arrays swift loops types

我正在处理命令行应用程序。第一个数组(称为firstArray,是)是用户通过readLine()输入的结果,它的所有元素都是Double。现在,我必须创建第二个数组,并将计算结果应用于第一个数组。某些结果是NaN,这是三角计算的原因。我需要将所有NaN都更改为字符串,但出现错误“无法将类型为'String'的值分配为类型为'Double'”。如何解决这个问题?

func calcLn () -> [Double] {

var calculatedArray = [Double]()

for item in firstArray {
    var result = log(Double((-100))/(cos(item)))
    calculatedArray.append(result)
}

for index in 0..<calculatedArray.count {
    if calculatedArray[index].isNaN {
    calculatedArray[index] = String("can't calculate")

1 个答案:

答案 0 :(得分:0)

一个数组只能存储一种类型的东西。 calculatedArray只能存储Double s,因此不能将其元素设置为String s。

您可以创建一个名为outputArray的新数组,该数组可以存储字符串,并将所有双打转换为字符串:

var outputArray = [String]()
for index in 0..<calculatedArray.count {
    if calculatedArray[index].isNaN {
        outputArray.append("can't calculate")
    } else {
        outputArray.append("\(calculatedArray[index])")
    }
}

您的calcLn方法返回一个[Double],但是您似乎想返回outputArray。在这种情况下,您需要更改其签名以返回[String]

请注意,您可以使用map进行数组转换。这是您的代码的较短版本:

func calcLn () -> [String] {
    let calculatedArray = firstArray.map { log(100.0/cos($0)) }
    let outputStringsArray = calculatedArray.map { $0.isNaN ? "can't calculate" : "\($0)" }

    return outputStringsArray
}