gpt4 book ai didi

swift - 如何处理 reduce 函数的初始 nil 值

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

我想在 Swift 中学习和使用更多函数式编程。所以,我一直在 Playground 上尝试各种事情。不过,我不明白 Reduce。基本的教科书示例有效,但我无法解决这个问题。

我有一个名为“toDoItems”的字符串数组。我想得到这个数组中最长的字符串。在这种情况下处理初始 nil 值的最佳做法是什么?我认为这可能经常发生。我想写一个自定义函数并使用它。

func optionalMax(maxSofar: Int?, newElement: Int) -> Int {
if let definiteMaxSofar = maxSofar {
return max(definiteMaxSofar, newElement)
}
return newElement
}

// Just testing - nums is an array of Ints. Works.
var maxValueOfInts = nums.reduce(0) { optionalMax($0, $1) }

// ERROR: cannot invoke 'reduce' with an argument list of type ‘(nil, (_,_)->_)'
var longestOfStrings = toDoItems.reduce(nil) { optionalMax(count($0), count($1)) }

最佳答案

可能只是 Swift 不会自动推断初始值的类型。尝试通过显式声明使其清楚:

var longestOfStrings = toDoItems.reduce(nil as Int?) { optionalMax($0, count($1)) }

顺便请注意,我不指望 $0(您的累加器),因为它不是 String 而是一个可选的 Int Int?

一般来说,为了避免以后阅读代码时出现混淆,我明确地将累加器标记为 a 并将来自系列的元素标记为 x:

var longestOfStrings = toDoItems.reduce(nil as Int?) { a, x in optionalMax(a, count(x)) }

在使用累加器或单个元素时,这种方式在代码中应该比$0$1更清晰。

希望对你有帮助

关于swift - 如何处理 reduce 函数的初始 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933146/

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