【发布时间】:2019-04-09 17:35:42
【问题描述】:
我正在尝试编写一个函数,该函数返回一个CollectionSlice,用于给定子序列的第一次出现。
我已设法将其编写为 Array 扩展,因为我知道返回类型将是 ArraySlice<Element>,但我无法确定适当的具体输出将使其成为通用Collection的函数
extension Array where Element: Comparable {
func firstOccuranceOf(subsequence: [Element]) -> ArraySlice<Element>? {
guard !subsequence.isEmpty else {
return nil
}
guard let startIndex = self.firstIndexOf(subsequence: subsequence) else {
return nil
}
let endIndex = self.index(startIndex, offsetBy: subsequence.count - 1)
return self[startIndex...endIndex]
}
}
TL;DR:如何将上面的函数重写为extension Collection?
【问题讨论】:
-
????请记住,不能订购集合
-
@XmasRights 您是否正在寻找整个
subsequence作为数组的子集?还是只是它的第一个元素? -
@Carpsen90 返回的切片应该是整个子序列的窗口
-
正如您为数组定义的那样,只有第一个元素应该是原始数组的一部分。所以
firstOccuranceOf(subsequence:)的定义必须先修复 -
@Carpsen90 我对
firstIndexOf(subsequence:)的实现不包括在内,但它确实只在找到整个子序列时才返回索引值。 (它本质上是遍历数组调用starts(with:))
标签: swift collections slice