【问题标题】:Can't convert [Double] to Double within function无法在函数内将 [Double] 转换为 Double
【发布时间】:2018-11-24 15:31:36
【问题描述】:

如何在不出现此错误的情况下运行此程序?

不能使用类型为“(从:Double,到:[Double],by:Double)”类型的参数列表调用“stride”

我知道答案就在那里,但我是编码新手,无法将 [double] 设置为 func 中的一个 double。

var array = [50.0, 40.0, 60.0]
var newArray = [Float]()

func possible(variable: [Double]) -> Float {
    var chance: Double = 0.0
    let last = variable
    let interval = -10.0
    for _ in stride(from: 100.0, to: last, by: interval) {
        chance += 0.05
    }
    return Float(chance)
}

newArray.append(possible(variable: array))

我明白为什么它不起作用,因为我告诉 last 是一个数组。但是如何让它单独运行数组的每个组件。我以为 let last = (variable[index]) 会起作用,但它没有。

理想的最终结果是newArray = [0.25, 0.3, 0.2]

【问题讨论】:

  • 首先应该是[Double] 吗? last 听起来不像是一个列表。我认为您需要在这里详细说明您的意图。
  • variableDouble 的数组。但是strideto 参数需要一个特定的Doublelast 设置为数组,而不是特定的数字。
  • @Carcigenicate 我想要的是数组的所有 3 个组件都通过函数并传递到一个新的 3 个浮点数组中。所以理想情况下,最终结果是 newArray = [0.25, 0.3, 0.2]
  • @rmaddy 我试着做 let last = (variable[index]) 认为这会起作用,但它没有。

标签: arrays swift function types type-conversion


【解决方案1】:

您需要 variable 参数是单个 Double,而不是数组。然后你需要为array中的每个值调用一次possible

这是更新代码的一种方法:

var array = [50.0, 40.0, 60.0]

func possible(variable: Double) -> Float {
    var chance: Double = 0.0
    let interval = -10.0
    for _ in stride(from: 100.0, to: variable, by: interval) {
        chance += 0.05
    }
    return Float(chance)
}

let newArray = array.map { possible(variable: $0) }
print(newArray)

但这里有一个更简单的possible 实现:

func possible(variable: Double) -> Float {
    return Float((100 - variable) / 10 * 0.05)
}

您的整个代码集可以简化为:

var array = [50.0, 40.0, 60.0]
let newArray = array.map { Float((100 - $0) / 10 * 0.05) }

【讨论】:

  • purrrrrfect!感谢 rmaddy,您的炸弹.com 并感谢 Carcigenicate 的贡献
  • @rmaddy 为什么 newArray 中只有第一个元素是浮点数,其余的都是双精度数?
  • 它们都是浮动的。为什么你不这么认为?
  • 因为当我运行它时,结果是 [0.25, 0.200000003, 0.200000003, 0.300000012, 0.349999994, 0.264999986, 0.264999986]
  • 欢迎来到浮点数学,并非所有数字都可以精确表示。使用Double 而不是Float,您将获得更好的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2013-05-02
  • 1970-01-01
相关资源
最近更新 更多