gpt4 book ai didi

swift 代码 Euler p1 需要帮助理解

转载 作者:行者123 更新时间:2023-11-28 07:34:52 26 4
gpt4 key购买 nike

谁能帮忙解释一下这段代码?我每天都在使用我在互联网上找到的不同方法来解决欧拉问题,而这个方法让我感到难过。

我不太明白为什么需要“let range”以及它的作用......也不是{variable}......我想我可以通过一些研究来解决剩下的问题,但下面的这两部分是完全让我困惑。

let range = 1...9
let anser = Array(1...9).filter {
num in
return ((num % 3 == 0) || (num % 5 == 0))
}.reduce(0) {
x, y in
return x + y
}

print(anser)

最佳答案

看起来范围没有被使用。

调用方法过滤器时,它使用闭包。该闭包是一种具有特定“形状”的方法,即

func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]

您在该代码中看到的是一种快捷语法,可让您指定 Element 参数。

因此,filter 将获取 1 到 9 范围内的每个值并将其传递给过滤器闭包,在那里它将测试它是否可以被 3 或 5 整除。

更长的写法是:

func f(num: Int) -> Bool {

return (num % 3 == 0) || (num % 5 == 0)
}

(1...9).filter(f)

其中 f 是我们定义的函数。

reduce 部分稍微复杂一些,因为 reduce 函数需要一个初始结果和一个闭包。

func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

完整代码的简写看起来像

func f(num: Int) -> Bool {

return (num % 3 == 0) || (num % 5 == 0)
}

func r(x: Int, y: Int) -> Int {

return x + y
}

(1...9).filter(f).reduce(0, r)

为了找点乐子,我们可以写一下

(1...9).filter { ($0 % 3 == 0) || ($0 % 5 == 0) }.reduce(0, { $0 + $1 })

其中 $n 构造是对传入的第 n 个参数的引用。您可能会不时看到它弹出。

关于swift 代码 Euler p1 需要帮助理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53496260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com