下面的代码是循环遍历Dictionary中的所有键字符串。除非我想搜索字典上没有的字符串,否则一切都很好。当我搜索不在Dictionary中的字符串时,我的代码应该再执行一个循环,然后落入if index != patternFromDatabase.count的其他部分,但是它不会,因为patternFromDatabase的枚举计数完成了patternFromDatabase循环。既然我不能只写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)")
}
}发布于 2017-08-20 09:06:39
我是否应该修改一下我的代码,这样我就不必面对这个问题来达到我的目的了?
是。有一些标准库方法来检查数组是否包含具有给定属性的元素。就你而言:
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:)返回集合的元素满足给定谓词的第一个索引。
发布于 2017-08-20 08:40:09
Swift 3.0
// asssyme haveResult表示结果不理想
// if you need one more loop even if he get result you can use same way
let dict = ["c": 123, "d": 045, "a": 456]
for (index, entry) in dict.enumerated() {
if index == dict.count-1 { // Last loop
if !haveResult {
// make external call
}
}
}https://stackoverflow.com/questions/45779857
复制相似问题