在For Enumerated中再循环一次

时间:2017-08-20 08:04:43

标签: ios swift

我在下面的代码中循环遍历Dictionary中的所有密钥字符串。一切都很好,直到我想搜索不在字典上的字符串。当我搜索不在Dictionary中的字符串时,我的代码应该再做一次循环然后落入if index != patternFromDatabase.count的其他内容,但是因为for循环它没有赢得由patternFromDatabase的枚举计数完成。 枚举完成后,我怎样才能做最后一次for循环,因为我不能写patternFromDatabase.enumerated() + 1

你有什么建议吗?或者我应该稍微修改我的代码所以我不必面对这个问题来达到我的目的吗? 非常感谢你。如果您需要更多解释,我将很乐意为您解释代码。

for (index, key) in patternFromDatabase.enumerated() {

            let startTimeForBitap = Date()

            print("i: \(index), db: \(patternFromDatabase.count), key: \(key)")

            if index != patternFromDatabase.count {

                if Algorithm().searchStringWithBitap(key, pattern: insertedPattern) == -1 {
                    continue

                } else {

                    let endTimeForBitap = Date().timeIntervalSince(startTimeForBitap)
                    bitapRunningTime.text = "\(convertTimetoMS(time: endTimeForBitap)) ms"
                    print("BITAP FOUND: \(endTimeForBitap)")

                    let bitapTextResult = pattern[key]
                    print(bitapTextResult ?? "")
                    bitapTextLabel.text = bitapTextResult
                    bitapPatternLabel.text = key
                    break
                }

            } else {

                let endTimeForBitap = Date().timeIntervalSince(startTimeForBitap)
                bitapTextLabel.text = "Pattern NOT FOUND"
                bitapPatternLabel.text = "Pattern NOT FOUND"

                bitapRunningTime.text = "\(convertTimetoMS(time: endTimeForBitap)) ms"
                print("BITAP NOT FOUND: \(endTimeForBitap)")
            }
        }

2 个答案:

答案 0 :(得分:1)

  

我应该稍微修改一下我的代码所以我不必面对这个问题来达到我的目的吗?

是。有标准的库方法来检查数组是否包含 具有给定属性的元素。在你的情况下:

if patternFromDatabase.contains(where: { key in Algorithm().searchStringWithBitap(key, pattern: insertedPattern) != -1 }) {
    print("found:", key)
} else {
    print("not found")
}

或者,如果找到的元素的索引是相关的:

if let idx = patternFromDatabase.index(where: { key in Algorithm().searchStringWithBitap(key, pattern: insertedPattern) != -1 }) {
    print("found at:", idx)
} else {
    print("not found")
}

参考文献:

  

contains(where:)

     

返回一个布尔值,指示序列是否包含满足给定谓词的元素。

     

index(where:)

     

返回集合元素满足给定谓词的第一个索引。

答案 1 :(得分:0)

Swift 3.0

// asssyme hasResult是Bool的结果

'123'