循环中的数组修改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环中的数组修改相关的知识,希望对你有一定的参考价值。
我正在开发一个命令行应用程序。第一个数组(称为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")
答案
数组只能存储一种类型的东西。 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
}
以上是关于循环中的数组修改的主要内容,如果未能解决你的问题,请参考以下文章