图书连载15:数组

2017-01-14 08:49:39来源:CSDN作者:fzhlee人点击

3.4.1 数组

所谓数组,就是将相同数据类型的元素,按一定顺序进行排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分它们的变量集合,这个名字被称为数组名,编号称为数组的下标。

组成数组的各个变量称为数组的分量,也称为数组的元素,有时也被称为下标变量。Swift数组是在程序设计中,为了处理方便,把具有相同类型的若干变量,按有序的形式组织起来的一种形式,这些按序排列的同类数据元素的集合称为Swift数组。

Swift 数组对存储数据有具体要求。不同于Object-C的NSArray和NSMutableArray类,它们可以存储任何类型的实例,而且不提供他们返回对象的任何本质信息。

 

数组的创建

在Swift中,数据值在被存储进入某个数组之前,数据的类型必须明确,方法是通过显式的类型标注或类型推断:

1     let stringArray =Array<String>()2     let floatArray = [Float]()3     let intArry = [1, 2, 3, 4, 5]

在第一行代码中,通过使用命名型类型Array<SomeType>,创建了一个字符串类型的数组,其中SomeType是这个数组中唯一允许存在的数据类型。

在第二行代码中,我们使用了像SomeType[]这样的简单语法,创建了一个类型为浮点数的数组floatArray。

前面两种方法都是通过显示的类型标注,创建指定类型的数组。在第三行代码中,通过给常量设置默认值,从而由Swift对其类型作出推断。因为所有值都是整数类型,所以数组的类型被推断为整型数组。


数组的访问和查找

数组中元素的访问,是通过下标语法实现的:

1     let stringArray =Array<String>()2     let floatArray = [Float]()3     let intArry = [1, 2, 3, 4, 5]

通过使用数组的只读属性count和isEmpty,可以获取数组中的元素数量:

1     intArry.isEmpty                               //判断数组是否为空,结果为:false2     intArry.count                                  //获得数组中元素的数量,结果为:5


通过使用数组的contains()方法,可以判断数组中是否存在某个元素:

1     intArry.contains(3)                         //判断数组中是否存在3,结果为:true

 

数组的编辑

在Swift中,您可以使用数组的append()方法,或者直接使用加号+,往已有的数组中添加新的元素:

1     var intArry = [1, 2, 3, 4, 5]2     intArry += [6]                                  //intArray的元素:[1, 2, 3, 4, 5, 6]3     intArry.append(7)                          //intArray的元素:[1, 2, 3, 4, 5, 6, 7]

 

如果需要在数组的中间的位置添加新的元素,可以使用insert()方法,新的元素将被插入到数组中指定的index位置,该位置原来的元素将依次右移:

1     intArry.insert(100, at: 2)                 // intArray的元素:[1, 2, 100, 3, 4, 5, 6, 7]

 

在Swift中修改数组中的某个元素,也是非常简单的。首先使用下标定位到需要修改的元素,然后直接给元素指定新的值即可:

1     intArry[2] = 9                                   // intArray的元素:[1, 2, 9, 3, 4, 5, 6, 7]

 

使用这种方式,甚至可以一次性同时修改数组中的多个元素的值:

1     intArry[3...5] = [8, 8, 8]                   // intArray的元素:[1, 2, 9, 8, 8, 8, 6, 7]

 

Swift数组提供了几种remove方法,用来删除数组中的元素:

1     intArry.removeFirst()                               // intArray的元素:[2, 9, 8, 8, 8, 6, 7]2     intArry.removeLast()                               // intArray的元素:[2, 9, 8, 8, 8, 6]3     intArry. remove(at: 2)                              //intArray的元素:[2, 9, 8, 8, 6]4     intArry.removeSubrange(Range(1..<3))        // intArray的元素:[2, 8, 6]5     intArry.removeAll()                                  // intArray的元素:[] 

数组的排序

相对于Object-C语言来说,在Swift中对数组进行排序变得极为简单:

1     var intArry = [11, 22, 3, 14,25]2     print(intArry.sort())                                  // 输出的结果:[3, 11, 14, 22, 25] 

sort()方法默认是按升序进行排列,如果想按照降序对数组进行排列:

1     intArry.sort(isOrderedBefore:>)            // 输出的结果:[25, 22, 14, 11, 3]

 

对拥有复杂类型元素的数组进行排序,也是非常简单的,在下面的例子中,创建了一个包含三个元组对应的数组,并且按照元组中姓名的升序进行排列:

1     var userList = [(name: "Thomas", age: 20),  (name: "John", age: 32),  (name: " Bill",age: 28)]2   userList.sort(isOrderedBefore:{$0.name > $1.name})userList排序后的结果为:[("Bill",28), ("John", 32), ("Thomas", 20)]。




3.4.2 多维数组

多维数组是指在数组中,仍然存在其它的数组。

您可以将多维数组理解为,通过几次索引可以找到存储的值就为几维数组,例如在一维数组userList中,通过一个索引值userList [0],就可以查到第一个用户。在二维数组userList2,就需要两次索引userList [0][0],才可以查到第一个用户。

多维数组的创建,与一维数组类似,以下代码定义了一个包含整数元素的二维数组:

1     var intArray = [[Int]]() 

同样可以通过指定初始值的方法,创建一个多维数组:

1     let numbers = [[1, 2, 3], [4,5, 6, 7]]

 

和一维数组一样,可以使用append()方法,往多维数组中添加更多的数组元素:

1     var numbers = [[1, 2, 3], [4,5, 6, 7]]2     numbers.append([8,9,10])                      //numbers的元素:[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]

 

那么如何获取多维数组中的元素呢?假如您需要获得numbers数组中的8这个数字,首先通过numbers[2]获得[8, 9, 10]数组,然后通过numbers[2][0]获得[8, 9, 10]数组中的第一个元素。

即通过numbers[2][0]获得第三个子数组中的第一个元素:8。




3.4.3 数组的遍历

在下面的代码中,使用..<符号,遍历数组从0至4之间的所有元素:

1     var numbers = [1, 2, 3, 4, 5]2     for index in 0 ..<numbers.count3     {4         print(numbers[index])5     } 

数组的遍历其实可以更加简单:

1     var numbers = [1, 2, 3, 4, 5]2     for num in numbers3     {4         print(num)5     }

 

如果仅需遍历指定范围内的数组元素,可以通过定义Range的方法来实现:

1     var numbers = [1, 2, 3, 4, 5]2     let range = 2..<numbers.count3     for (index, value) inzip(range, numbers[range])4     {5               print("/(index): /(value)")6     }

 

对于包含复杂元素的数组进行遍历,也是非常简单的事情:

1     let scores =["Jerry":78, "Thomas":88, "John":92]2     for (student, score) in scores3     {4         print(student + "' score is/(score)")5     }

 

通过for-in语句,也能很方便地实现对多维数组的遍历:

1     var numbers = [[1, 2, 3],[4, 5,6, 7]]2     for subNumbers in numbers3     {4         for number in subNumbers5         {6             print(number)7         }8     }


一个人写书,难免会有不足和纰漏,欢迎大家通过这个邮箱:coolketang@163.com

将你的意见和建议告诉我们,感谢!

关注我的微信公众号“酷课堂”,获取更多学习资源,欢迎留言交流。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台