gpt4 book ai didi

swift - 高阶函数赋值

转载 作者:搜寻专家 更新时间:2023-10-31 22:11:06 24 4
gpt4 key购买 nike

我正在学习 Swift 中的高阶函数(例如 .map .filter .reduce...)和泛型类型。

这是我的功能:

func max<T: Comparable>(_ array: [T]) -> T {
var max = 0 as! T

for value in array {
if value > max { max = value }
}

return max
}

如何用高阶函数替换我的 for 循环以获得相同的结果?

我希望做这样(或更好)的事情:

max = array.map { $0 > max ? $0 : max }

最佳答案

减少!

return array.reduce(nil)
{
(max: T?, current: T) -> T? in
guard let max = max else { return current }
return max > current ? max : current
}

这将返回一个可选的,但考虑到您可能会传入一个空数组,这可能是明智的。

当然还有这个

https://developer.apple.com/documentation/swift/array/1688806-max

你的问题的含义是这是一个学习练习。所以这里是使用高阶函数的解决方案的概括。请注意,Swft 标准库已包含执行此操作的函数。

extension Array 
{
func pickOne(choose: (Element, Element) -> Element) -> Element?
{
return self.reduce(nil)
{
(bestSoFar: Element?, current: Element) -> Element? in
guard let bestSoFar = bestSoFar else { return current }
return choose(bestSoFar, current)
}
}
}

所以 max 的功能现在定义如下:

array.pickOne { $0 > $1 ? $0 : $1 }

最小值是

array.pickOne { $0 < $1 ? $0 : $1 }

关于swift - 高阶函数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054046/

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