gpt4 book ai didi

swift - 如何写任何(s : SequenceType) in Swift

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:04 24 4
gpt4 key购买 nike

Swift 似乎没有 any() 或 all() 的功能,所以我正在尝试自己制作。我得到的最接近的是

func any<S: SequenceType
where S.Generator.Element: BooleanType>
(sequence: S) -> Bool{

var __g = sequence.generate()
var first_element = __g.next()
if first_element == nil{
return false
}
return reduce(sequence, first_element!, {$0 || $1})
}

编辑:根据评论,这个函数应该看起来像这样

func any<S: SequenceType
where S.Generator.Element: BooleanType>
(sequence: S) -> Bool{

return reduce(sequence, false, {$0 || $1})
}

编译器告诉我

'S.Generator.Element' is not convertible to 'Bool'

在我看来,我是在明确告诉编译器它在第二行。我错过了什么?

最佳答案

你的问题是 next 返回一个可选的。这意味着 reduce 期望返回一个可选的,而 $0 是一个可选的。您必须解开可选项才能使用 || 运算符。您也不知道类型是 Bool,只知道它是 BooleanType。您还必须通过调用 boolValue 将其转换为实际的 Bool:

func any<S: SequenceType
where S.Generator.Element: BooleanType>
(sequence: S) -> Bool{

var __g = sequence.generate()
var first_element = __g.next()
if first_element == nil{
return false
}
return reduce(sequence, first_element!.boolValue, {$0 || $1})
}

但是,在这种情况下,我认为简单是最好的:

func any<S: SequenceType
where S.Generator.Element: BooleanType>
(sequence: S) -> Bool{

for element in sequence {
if element.boolValue {
return true
}
}
return false
}

这实际上也更有效,因为它会在找到第一个 true 时立即返回,而不是总是遍历整个过程。

关于swift - 如何写任何(s : SequenceType) in Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195726/

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