在
Swift中,如何检查数组是否包含完整的给定子数组?例如,是否有一个包含这样的函数:
let mainArray = ["hello","world","it's","a","beautiful","day"] contains(mainArray,["world","it's"]) // would return true contains(mainArray,"it"]) // would return false contains(mainArray,"a"]) // would return false - not adjacent in mainArray
解决方法
您可以使用更高级别的功能来执行此操作,如下所示:
func indexOf(data:[String],_ part:[String]) -> Int? { // This is to prevent construction of a range from zero to negative if part.count > data.count { return nil } // The index of the match could not exceed data.count-part.count return (0...data.count-part.count).indexOf {ind in // Construct a sub-array from current index,// and compare its content to what we are looking for. [String](data[ind..<ind+part.count]) == part } }
此函数返回第一个匹配的索引(如果有),否则返回nil.
您可以按如下方式使用它:
let mainArray = ["hello","day"] if let index = indexOf(mainArray,"it's"]) { print("Found match at \(index)") } else { print("No match") }
编辑为通用数组的扩展…
现在可以将其用于Equatable类型的任何同类数组.
extension Array where Element : Equatable { func indexOfContiguous(subArray:[Element]) -> Int? { // This is to prevent construction of a range from zero to negative if subArray.count > self.count { return nil } // The index of the match could not exceed data.count-part.count return (0...self.count-subArray.count).indexOf { ind in // Construct a sub-array from current index,// and compare its content to what we are looking for. [Element](self[ind..<ind+subArray.count]) == subArray } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。