Geo*_*Lee 9 loops outer-join swift swift2
我正在阅读Michael Dippery @ 2015的书"Professional Swift".在第25页的书中,他写道:
"break和continue语句都会从最里面的循环中断开.但是,你可以标记循环,这样你就可以突破外循环了"
let data = [[3,9,44],[52,78,6],[22,91,35]]
let searchFor = 78
var foundVal = false
outer: for ints in data {
inner: for val in ints {
if val == searchFor {
foundVal = true
break outer
}
}
}
if foundVal {
print("Found \(searchFor) in \(data)")
} else {
print("Could not find \(searchFor) in \(data)")
}
Run Code Online (Sandbox Code Playgroud)
但是,当我改变时,在操场上:
break outer
Run Code Online (Sandbox Code Playgroud)
代码到
break inner
Run Code Online (Sandbox Code Playgroud)
出现相同的结果:
发现 78 in [[3, 9, 44], [52, 78, 6], [22, 91, 35]]
还有必要label loops突破outer loop吗?
Ash*_*kad 10
打破内部和外部循环使差异让我们通过获取一个updatedData变量再次检查您的代码.
let data = [[3,9,44],[52,78,6],[22,91,35]]
let searchFor = 78
var updatedData = [Int]()
var foundVal = false
outer: for ints in data {
inner: for val in ints {
updatedData.append(val)
if val == searchFor {
foundVal = true
break outer
}
}
}
Run Code Online (Sandbox Code Playgroud)
在break outer你会得到像:
在[[3,9,44],[52,78,6],[22,91,35]中找到78
更新的数据是[3,9,44,52,78]
在break inner您将获得不同的更新数据:
在[[3,9,44],[52,78,6],[22,91,35]中找到78
更新的数据是[3,9,44,52,78,22,91,35]
因此,你将在78之后检查在内部中6没有添加到更新的数据中,因为内部循环只是被打破并且再次与下一个一起盯着ints.
在休息时,整个循环将被破坏.
希望你能得到这方面的帮助.