gpt4 book ai didi

ios - 将Underscore的一些功能移植到swift

转载 作者:行者123 更新时间:2023-11-30 12:36:28 25 4
gpt4 key购买 nike

作为学习练习,我将 Underscore.js 的一些实用函数移植到 swift 中,并从 some 开始,如果集合中的任何元素通过给定的集合 block ,则返回 true .

简单的实现:

extension Sequence {
func some(_ predicate: (Self.Iterator.Element) -> Bool) -> Bool {
return reduce(false) { $0 || predicate($1) }
}
}

但是我注意到很多 STL 函数都包含 throwsrethrows。一个很好的例子是 filter 函数,它的函数签名为:

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

有人可以告诉我如何编写 some 函数,同时利用 throwrethrows 功能吗?

最佳答案

我最终通过结合使用 mapreduce 解决了我的问题。我做了一个快速 Playground :

extension Sequence {
func some(_ predicate: (Self.Iterator.Element) throws -> Bool) rethrows -> Bool {
return try map(predicate).reduce(false) { $0 || $1 }
}
}

let list = [1, 2, 3]
list.some({ $0 == 1 }) // true
list.some({ $0 % 50 == 0 }) // false

使用映射,您可以将谓词应用于每个元素,将整个数组映射到 bool 数组,然后将它们组合在一起。

这不是最有效的算法,并且可以进行一些明显的优化,例如在遇到 true 值时立即返回等,但我确实喜欢该解决方案的简单功能性质.

关于ios - 将Underscore的一些功能移植到swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42799608/

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