循环中的数组修改

问题描述 投票:0回答:1

我正在开发一个命令行应用程序。第一个数组(称为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")
arrays swift loops types
1个回答
0
投票

数组只能存储一种类型的东西。 calculatedArray只能存储Doubles,所以你不能将它的元素设置为Strings。

您可以创建一个名为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
}
© www.soinside.com 2019 - 2024. All rights reserved.