Bạn có thể làm điều đó với chức năng cấp cao hơn, như thế này:
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
}
}
hàm này trả về chỉ số của các trận đấu đầu tiên, nếu có, hoặc nil
otherwi se.
Bạn có thể sử dụng nó như sau:
let mainArray = ["hello", "world", "it's", "a", "beautiful", "day"]
if let index = indexOf(mainArray, ["world", "it's"]) {
print("Found match at \(index)")
} else {
print("No match")
}
Editing nhập như một phần mở rộng cho một mảng chung ...
này bây giờ có thể được sử dụng cho bất kỳ mảng đồng nhất của Equatable
loại.
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
}
}
}
Tôi nghĩ rằng điều này sẽ làm việc nhưng có thể là quá thông minh cho mọi người hiểu. (Nó chắc chắn là dành cho tôi). Có thể bạn có thể thêm một số ý kiến cho điều này để giải thích những gì nó đang làm? – Fogmeister
@Fogmeister Chắc chắn! Tuy nhiên, điều này ít đáng sợ hơn vẻ bề ngoài, về cơ bản, "reduce" thay thế một vòng lặp "for" trên chỉ mục ban đầu, trong khi '[String] (dữ liệu [ind ..
dasblinkenlight
OK, do đó, về cơ bản nó ... bắt đầu tại 0. Kiểm tra subarray tại 0 bằng tham số 'part'. Nếu nó được trả về 0 tất cả các cách thức thông qua. Nếu nó không phải là đi đến 1 và kiểm tra subarray tại 1 là bằng tham số phần và như vậy? – Fogmeister