遍历数组范围

时间:2019-06-21 14:39:24

标签: swift

如何遍历array范围?例如,如果我在一个array中有5个对象。在此示例中,我想从索引[3]循环到array的末尾,它将遍历并更新对象3-5,并跳过对象1和2。这就是我到目前为止使用{{1 }}方法(此代码无效)。这是正确的方法吗?我该如何实现?

stride

3 个答案:

答案 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(..<)