Swift 扩展 Sequence 以检查是否存在交集
Swift extension of Sequence to check if an intersection exists
我的目标是让一个函数在所有 Sequence
中可用,例如 Array 或 Set。
这个函数应该return一个Bool
判断两个序列中是否至少存在一个对象。
// Usage
let s1 = ["hi", "hey", "ho"]
let s2:Set = ["woop", "oi", "yes"]
if s2.intersects(with: s1) {
print("Happy me, it's a match")
}
extension Sequence where Element:Equatable {
func intersects<T:Sequence>(with anotherSequence:T) -> Bool
where T.Element: Equatable {
// ⬇ error: `Extraneous argument label 'where:' in call`
return self.contains(where: anotherSequence.contains)
}
}
// doing the same function outside works:
let rez = s1.contains(where: s2.contains)
print(rez)
我觉得我快到了,但我不明白为什么第一个 contains(where:)
给我这个错误。
contains()
和contains(where:)
都属于Sequence
不?
我错过了什么?
好吧,我找到了正确的语法,但不确定为什么其他语法不起作用:/
如果有人仍然可以解释为什么另一种方法不起作用,那将很有趣
extension Sequence where Element:Equatable {
func intersects<T:Sequence>(with anotherSequence:T) -> Bool
where T.Element == Self.Element {
return self.contains(where: anotherSequence.contains)
}
}
我的目标是让一个函数在所有 Sequence
中可用,例如 Array 或 Set。
这个函数应该return一个Bool
判断两个序列中是否至少存在一个对象。
// Usage
let s1 = ["hi", "hey", "ho"]
let s2:Set = ["woop", "oi", "yes"]
if s2.intersects(with: s1) {
print("Happy me, it's a match")
}
extension Sequence where Element:Equatable {
func intersects<T:Sequence>(with anotherSequence:T) -> Bool
where T.Element: Equatable {
// ⬇ error: `Extraneous argument label 'where:' in call`
return self.contains(where: anotherSequence.contains)
}
}
// doing the same function outside works:
let rez = s1.contains(where: s2.contains)
print(rez)
我觉得我快到了,但我不明白为什么第一个 contains(where:)
给我这个错误。
contains()
和contains(where:)
都属于Sequence
不?
我错过了什么?
好吧,我找到了正确的语法,但不确定为什么其他语法不起作用:/
如果有人仍然可以解释为什么另一种方法不起作用,那将很有趣
extension Sequence where Element:Equatable {
func intersects<T:Sequence>(with anotherSequence:T) -> Bool
where T.Element == Self.Element {
return self.contains(where: anotherSequence.contains)
}
}