如何遍历array范围?例如,如果我在一个array中有5个对象。我想从索引3循环到array的末尾,在这个例子中,它将遍历并更新对象3-5,跳过对象1和2。这就是我到目前为止使用stride方法所做的(这段代码不起作用)。这是正确的方法吗?我如何才能做到这一点?
stride(from: markers[index], to: markers.endIndex, by: 1).forEach { i in
// Do something for each array object
}发布于 2019-06-22 04:03:30
您可以使用范围运算符来获取数组的索引或切片序列。你使用哪一个取决于你想要做什么。为了清楚起见,我将省略错误检查。
例如:
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()
}注意,这里我们需要指定这两个限制,因为range对数组一无所知。
不修改东西通常更快,所以如果这适合你的用例,你可以考虑如下:
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,以便索引与原始数组相匹配。
发布于 2019-06-21 22:51:31
您可以简单地迭代数组切片,删除前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])
}发布于 2019-06-22 01:29:02
你可以简单地在Swift中使用Range Operator遍历array,比如
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(..<)
https://stackoverflow.com/questions/56705571
复制相似问题