如何遍历array
范围?例如,如果我在一个array
中有5个对象。在此示例中,我想从索引[3]循环到array
的末尾,它将遍历并更新对象3-5,并跳过对象1和2。这就是我到目前为止使用{{1 }}方法(此代码无效)。这是正确的方法吗?我该如何实现?
stride
答案 0 :(得分:1)
您可以使用范围运算符获取数组的索引或切片序列。使用哪种取决于您要执行的操作。为了清楚起见,我将省略错误检查。
例如:
let letters = ["a", "b", "c", "d", "e"]
letters[3...].forEach { print($0) } // prints d e
// or you can print up to index 3
letters[...3].forEach { print($0) } // prints a b c d
// or print elements 1-3 inclusive
letters[1...3].forEach { print($0) } // prints b c d
// or print elements 1-3 excluding index 3
letters[1..<3].forEach { print($0) } // prints b c d
如果您要修改数组的元素,请传递索引而不是元素
var mutableLetters = ["a","b","c","d","e"]
(3..<mutableLetters.count).forEach {
mutableLetters[$0] = mutableLetters[$0].uppercased()
}
请注意,由于范围对数组一无所知,因此我们需要指定两个限制。
通常,迅速不进行任何修改,因此,如果适合您的用例,您可能会考虑以下内容:
let immutableLetters = ["a","b","c","d","e"]
let upperCasedFromThreeOn = immutableLetters[3...].map { $0.uppercased() }
// upperCasedFromThreeOn = ["D","E"]
最后,有时您需要同时了解索引和元素。您可以如上所述在索引上使用forEach
,但是另一种方法是使用enumerated()
,这将创建索引和元素的元组。
let range = 2...4
immutableLetters.enumerated()
.filter { (index,_) in range.contains(index) }
.forEach { (index, element) in
print("\(index) \(element)")
}
在此,我在枚举后使用了filter
,以使索引与原始数组匹配。
答案 1 :(得分:0)
您可以简单地遍历数组切片,删除前n个元素:
let markers = ["a","b","c","d","e"]
for marker in markers.dropFirst(2) {
print(marker) // this will print 'c d e'
}
如果您需要更改数组,则可以遍历其索引的一部分:
let markers = ["a","b","c","d","e"]
for index in markers.indices.dropFirst(2) {
print(markers[index])
}
答案 2 :(得分:0)
您可以使用 Swift 中的 array
来简单地通过Range Operator
循环,
var markers = ["M1","M2","M3","M4","M5"]
let count = markers.count
if count > 2 {
for i in 2..<count {
//add your code here..
}
}
在上面的代码中,我使用了 half-open range operator(..<)