Mike T. 私信我,如何讓 for 循環從下標 i(比如 5)開始,而不是從 0 開始。
Swift 2.0 提供了一種像 C 語言那樣的循環,代碼如下:
[cpp] view plaincopy
for var index = 5; index < array.count; index++ {
// do something with array[index]
}
也可以用區間運算符的方式實現相似的功能:
[cpp] view plaincopy
for index in 5..<array.count {
// do something with array[index]
}
甚至可以用forEach這樣寫:
[cpp] view plaincopy
(5..<array.count).forEach {
// do something with array[$0]
}
你也可以截取數組中你需要使用的部分進行遍歷,每次遍歷時可以獲取數組下標(本例中偏移量為 5,也可以看看 另一篇講 slice enumeration 的文章)和對應的值。
[cpp] view plaincopy
for (index, value) in array[5..<array.count].enumerate() {
// do something with (index + 5) and/or value
}
如果你想要更準確的計數,而不必每次都加上偏移量 5 的話,可以使用zip,例子如下:
[cpp] view plaincopy
let range = 5..<array.count
for (index, value) in zip(range, array[range]) {
// use index, value here
}<br>
也可以調整zip方法,將其應用在forEach里:
[cpp] view plaincopy
let range = 5..<array.count
zip(range, array[range]).forEach {
index, value in
// use index, value here
}
當然,你也可以使用map來處理子區間的值。不像forEach,map會在閉包里返回一個新的值。
[cpp] view plaincopy
let results = array[range].map({
// transform $0 and return new value
})
如果你不想遍歷數組前 5 個元素,可以使用dropFirst()從剩余的元素開始遍歷。下面這個例子沒有使用下標,如果需要的話可以按前面提到的方法去獲取。
[cpp] view plaincopy
for value in array.dropFirst(5) {
// use value here
}
使用removeFirst()可以返回數組片(slice)個元素,然后該元素會從數組片中刪除。接下來的代碼段結合了removeFirst()和dropFirst(),首先去掉前5個元素,然后遍歷數組剩余的元素。
[cpp] view plaincopy
var slice = array.dropFirst(5)
while !slice.isEmpty {
let value = slice.removeFirst()
// use value here
}
另外也有很多方式可以遍歷數組,包括在需要的時候才去獲取數組切片的值(使用lazy進行延遲加載),但是以上提到的方法已經基本夠用了。
感謝 Mike Ash,并且一定要去看看 Nate Cook的解決方案。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。