Swift循环遍历集合的方法总结分享

2020-01-08 23:25:48王振洲

stride遍历分为


stride<T : Strideable>(from start: T, to end: T, by stride: T.Stride)


stride<T : Strideable>(from start: T, through end: T, by stride: T.Stride)

两种遍历方式,代码如下:


 //stride正向遍历
 for index in stride(from: 1, to: 6, by: 1) {
 print(index)
 print(iosArray[index])
 }

 //stride正向跳跃遍历
 for index in stride(from: 0, to: 6, by: 2) {
 print(index)
 print(iosArray[index])
 }

 //stride反向遍历
 for index in stride(from: 6, to: 1, by: -1) {
 print(index)
 print(iosArray[index])
 }

 //stride through正向遍历
 for index in stride(from: 0, through: 6, by: 1) {
 print(index)
 print(iosArray[index])
 }

1、正如stride单词的含义“大步跨过”,使用这种方式遍历的好处自然是可以灵活的根据自己的需求遍历,比如我们有时需要遍历索引为偶数或者基数的元素,或者每隔3个元素遍历一次等等类似的需求都可以轻松实现;

2、stride遍历同样可以实现正向和反向的遍历,在by后面添加正数表示递增的正向遍历,添加负数表示递减的反向遍历;

3、to和through两种遍历方式的不同在于to不包含后面的索引,而through包含后面的索引,以to: 6和through: 6为例,to:<6或者>6,through:<=6或者>=6,至于是<还是>取决于是正向遍历还是反向遍历。

第三种方式:基于块的遍历

OC拥有一套很优雅基于快的遍历,Swift保持了这套优秀的接口,下面来看看Swift是如何使用的。

正向遍历


 //遍历数组
 for (n, c) in iosArray.enumerated() {
 print("(n): (c)")
 }

 //遍历字典
 for (n, c) in iosDict.enumerated() {
 print("(n): (c)")
 }

注意:

1、(n, c)中n表示元素的输入顺序,c表示集合中的每一个元素;

2、由于数组是有序的,所以在数组中n自然也可以表示每一个元素在数组中索引,而字典是无序的,但是n依然会按照0、1、2...的顺序输入,因此不可以代表在字典中的索引。

反向遍历


 //反向遍历数组
 for (n, c) in iosArray.enumerated().reversed() {
 print("(n): (c)")
 }

 //反向遍历字典
 for (n, c) in iosDict.enumerated().reversed() {
 print("(n): (c)")
 }

反向遍历就是直接在enumerated()函数后调用reversed()函数。

总结

在总结OC循环遍历时,笔者极力推崇基于块的循环遍历,因为相比较其他的遍历方式,基于块的循环遍历实在是集优雅与实用于一体的尤物,但是在Swift中情况发生了一些变化。

1、以上列举了3大种遍历方式,其实这种分类方式并不严谨,他们只是展示的形式不一样,本质上都属于for-in循环的变种,都是基于枚举的循环遍历,所以大家不必太较真他们的本质区别,在形式上区分开就可以,不影响我们的使用;