[Swift]遍历集合类型(数组、集合和字典)

摘要:
[String]=[“s”,根据元素顺序遍历4oriteminaryStr{5print(item)6}78。//方法2:遍历14forindexin0…(arrayStr.count-1){15print(arrayStr[index])16}1718//方法4:=)通过值26 forindexinstride(来自:

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9798475.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Swift提供了三种主要的集合类型,称为数组,集合和字典,用于存储值集合。

数组是有序的值集合。

集是唯一值的无序集合。

字典是键值关联的无序集合。

../_images/CollectionTypes_intro_2x.png

Swift中无法再使用传统形式的for循环。

1 //传统for循环形式不适用于Swift
2 for(单次表达式;条件表达式;末尾循环体){中间循环体;}

遍历数组:可以使用forin循环遍历数组中的值。

 1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"]
 2 
 3 //方法1:根据元素顺序遍历
 4 for item in arrayStr {
 5     print(item)
 6 }
 7 
 8 //方法2:根据部分元素顺序遍历
 9 for item in arrayStr[1...5] {
10     print(item)
11 }
12 
13 //方法3:根据索引顺序遍历
14 for index in 0...(arrayStr.count - 1) {
15     print(arrayStr[index])
16 }
17 
18 //方法4:初始化数组并顺序遍历
19 for item in Array(1...10) {
20     print(item)
21 }
22 
23 //方法5:stride函数
24 //from,to,by 最后一个值是 >(或<) to的值
25 //from,through,by 最后一个值是 >=(或<=) through的值
26 for index in stride(from: 0, to: arrayStr.count,by: 1 )
27 {
28     print(arrayStr[index])
29 }

如果不需要序列中的每个值,则可以使用下划线(_)代替变量名来忽略这些值。

1 let base = 3
2 let power = 10
3 var answer = 1
4 for _ in 1...power {
5     answer *= base
6 }
7 print("(base) to the power of (power) is (answer)")
8 // Prints "3 to the power of 10 is 59049"

遍历集合可以使用forin循环遍历集合中的值

1  let arrayStr:Set<String> = ["s","t","r","e","n","g"]
2 //输出的顺序是随机的
3 for item in arrayStr {
4     print("(item)")
5 }

Swift的Set类型没有定义的顺序。要以特定顺序迭代集合的值,请使用该sorted()方法,该方法将集合的元素作为使用<运算符排序的数组返回

1  let arrayStr:Set<String> = ["s","t","r","e","n","g"]
2 //按照字母排序顺序输出
3 for item in arrayStr.sorted() {
4     print("(item)")
5 }

遍历字典(可单独遍历键、值、或键值)

可以用字典遍历键值对forin环。字典中的每个项都作为元组返回,您可以将元组的成员分解为临时常量或变量,作为迭代的一部分:(key, value),还可以通过访问字典的键keysvalues属性来检索字典的键或值的可迭代集合:

 1 var direc: [Int: String] =  [0:"s",1:"t",2:"r",3:"e",4:"n",5:"g"]
 2 
 3 //按键值对遍历顺序遍历
 4 for (num, char) in direc.sorted(by: <) {
 5     print("(num): (char)")
 6 }
 7 
 8 //按键遍历顺序遍历
 9 for num in direc.keys.sorted(by: <) {
10     print("(num)")
11 }
12 
13 //按值遍历顺序遍历
14 for char in direc.values {
15     print("(char)")
16 }

如果您需要使用带有Array实例的API的字典键或值,请使用keysvalues属性初始化新数组

1 let nums = [Int](direc.keys)
2 print(nums)
3 //次序随机 [4, 5, 2, 0, 1, 3]
4 
5 let chars = [String](direc.values)
6 print(chars)
7 //次序随机 ["n", "g", "r", "s", "t", "e"]

Swift的Dictionary类型没有定义的顺序。要按特定顺序迭代字典的键或值,请sorted()在其keysvalues属性使用该方法

倒序遍历 :reversed() 或 stride函数

Swift中标准库中方法

1 //可以用来快速的枚举数组中的内容,并用元组(index, value)接收
2 public func enumerated() -> EnumeratedSequence<Array<Element>>
3 
4 //可以倒叙数组内容
5 public func reversed() -> ReversedRandomAccessCollection<Array<Element>>

当两者结合使用用到索引时需要注意

 1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"]
 2 
 3 //索引元素值绑定一起倒序遍历
 4 for i in arrayStr.enumerated().reversed() {
 5   print("(i) ", terminator: "")
 6 }
 7 /*
 8 (offset: 10, element: "!") (offset: 9, element: "n") (offset: 8, element: "e") (offset: 7, element: "h") (offset: 6, element: "t") (offset: 5, element: "g") (offset: 4, element: "n") (offset: 3, element: "e") (offset: 2, element: "r") (offset: 1, element: "t") (offset: 0, element: "s") 
 9 */
10 
11 //只元素值倒序遍历,原索引不变
12 for i in arrayStr.reversed().enumerated() {
13   print("(i) ", terminator: "")
14 }
15 /*
16 (offset: 0, element: "!") (offset: 1, element: "n") (offset: 2, element: "e") (offset: 3, element: "h") (offset: 4, element: "t") (offset: 5, element: "g") (offset: 6, element: "n") (offset: 7, element: "e") (offset: 8, element: "r") (offset: 9, element: "t") (offset: 10, element: "s") 
17 */

倒序遍历数组

 1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"]
 2 
 3 //方法1:根据元素倒序遍历
 4 for item in arrayStr.reversed() {
 5     print(item)
 6 }
 7 
 8 //方法2:根据部分元素倒序遍历
 9 for item in arrayStr[1...5].reversed() {
10     print(item)
11 }
12 
13 //方法3:根据索引倒序遍历
14 for index in (0...(arrayStr.count - 1)).reversed() {
15     print(arrayStr[index])
16 }
17 
18 //方法4:初始化数组并倒序遍历
19 for item in Array(1...10).reversed() {
20     print(item)
21 }
22 
23 //方法4:初始化数组并倒序遍历
24 for item in Array(1...10).reversed() {
25     print(item)
26 }
27 
28 //方法5:stride函数
29 //from,to,by 最后一个值是 >(或<) to的值
30 //from,through,by 最后一个值是 >=(或<=) through的值
31 for index in stride(from: arrayStr.count - 1, through: 0,by: -1 )
32 {
33      print(arrayStr[index])
34 }

 倒序遍历集合

1 let arrayStr:Set<String> = ["s","t","r","e","n","g"]
2 //按照字母排序倒序输出
3 for item in arrayStr.sorted().reversed() {
4     print("(item) ", terminator: "")
5 }
6 //Print "t s r n g e" 

倒序遍历字典(可单独遍历键、值、或键值)

1 var direc: [Int: String] =  [0:"s",1:"t",2:"r",3:"e",4:"n",5:"g"]
2 //按键值对倒序遍历
3 for (num, char) in direc.sorted(by: <).reversed() {
4     print("(num): (char)")
5 }

免责声明:文章转载自《[Swift]遍历集合类型(数组、集合和字典)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【php】【psr】psr2 编码风格规范探秘GO语言《比较C#与GO的性能--XML序列化》下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java 枚举类型enum 的使用

java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽时间研究下吧。 Java中的枚...

算法学习笔记——最小二乘法的回归方程求解

最小二乘法的回归方程求解 最近短暂告别大数据,开始进入到了算法学习的领域,这时才真的意识到学海无涯啊,数学领域充满了无限的魅力和乐趣,可以说更甚于计算机带给本人的乐趣,由于最近正好看到线性代数,因此,今天我们就来好好整理一下机器学习领域中的一个非常重要的算法——最小二乘法,那么,废话不多说,我们直接开始吧 ! 1. 最小二乘法介绍 1.1 举例 现实生活中...

C++随机崩溃捕捉处理

1. 会引起异常的几个原因(主要记录目前遇到过的几个问题) 程序读取了无效的内存地址 堆栈的溢出,比如无限循环导致那段内存溢出,比如把size为20的缓存拷贝到size为10的缓存块等 无法申请到有效的内存 多次删除同一块内存 2. 异常处理 2.1 SEH(Structured Exception Handling) SEH是C语言的异常处理方法,主...

牛顿迭代法

先说下:牛顿,你真是各种学科的大神神人物。初中,高中物理占了一半不够,你还占了数学一席之地,我膜拜你,我全家膜拜你。 牛顿迭代法解非线性方程f(x)=0,是把非线性方程线性化的一种近似方法。关键原理如下: 1)把f(x)在点x0的某邻域内展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… , 2...

Asp.Net Core 缓存的使用(译)

原文:http://www.binaryintellect.net/articles/a7d9edfd-1f86-45f8-a668-64cc86d8e248.aspx环境:Visual Studio 2017, Asp.Net Core 1.1. 缓存机制主要是为了提高性能。在ASP.NET Web Forms 及 ASP.NET MVC中可以直接使用缓...

JMeter测试HBase

在网上找了关于jmeter连接hbase的方式,主要分为两种:通过导入jar包连接(Java Request)和通过BeanShell远程连接,由于刚接触jmeter没多久,对BeanShell还不熟,所以打算通过eclipse用Java编写连接hbase的程序并打包成jar包,导入到jmeter的方式连接hbase。 HBase本地远程连接HBase是测...