首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历数组的范围

循环遍历数组的范围
EN

Stack Overflow用户
提问于 2019-06-21 22:39:24
回答 3查看 1.5K关注 0票数 2

如何遍历array范围?例如,如果我在一个array中有5个对象。我想从索引3循环到array的末尾,在这个例子中,它将遍历并更新对象3-5,跳过对象1和2。这就是我到目前为止使用stride方法所做的(这段代码不起作用)。这是正确的方法吗?我如何才能做到这一点?

代码语言:javascript
复制
stride(from: markers[index], to: markers.endIndex, by: 1).forEach { i in
    // Do something for each array object
}
EN

回答 3

Stack Overflow用户

发布于 2019-06-22 04:03:30

您可以使用范围运算符来获取数组的索引或切片序列。你使用哪一个取决于你想要做什么。为了清楚起见,我将省略错误检查。

例如:

代码语言:javascript
复制
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 

如果想要修改数组的元素,则需要传递索引而不是元素

代码语言:javascript
复制
var mutableLetters = ["a","b","c","d","e"]
(3..<mutableLetters.count).forEach {
    mutableLetters[$0] = mutableLetters[$0].uppercased()
}

注意,这里我们需要指定这两个限制,因为range对数组一无所知。

不修改东西通常更快,所以如果这适合你的用例,你可以考虑如下:

代码语言:javascript
复制
let immutableLetters = ["a","b","c","d","e"]
let upperCasedFromThreeOn = immutableLetters[3...].map { $0.uppercased() }
// upperCasedFromThreeOn = ["D","E"]

最后要注意的是,有时您需要同时了解索引和元素。您可以像上面那样对索引使用forEach,但另一种方法是使用enumerated(),这将创建索引和元素的元组。

代码语言:javascript
复制
let range = 2...4
immutableLetters.enumerated()
    .filter { (index,_) in range.contains(index) }
    .forEach { (index, element) in
        print("\(index) \(element)")
    }

在这里,我在枚举之后使用了一个filter,以便索引与原始数组相匹配。

票数 3
EN

Stack Overflow用户

发布于 2019-06-21 22:51:31

您可以简单地迭代数组切片,删除前n个元素:

代码语言:javascript
复制
let markers = ["a","b","c","d","e"]

for marker in markers.dropFirst(2) {
    print(marker)   // this will print 'c d e'
}

如果你需要改变你的数组,你可以遍历它的索引片段:

代码语言:javascript
复制
let markers = ["a","b","c","d","e"]

for index in markers.indices.dropFirst(2) {
    print(markers[index])
}
票数 1
EN

Stack Overflow用户

发布于 2019-06-22 01:29:02

你可以简单地在Swift中使用Range Operator遍历array,比如

代码语言:javascript
复制
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(..<)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56705571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档