图书连载15:数组

前端之家收集整理的这篇文章主要介绍了图书连载15:数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

3.4.1 数组

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

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

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

数组的创建

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

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

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

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

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


数组的访问和查找

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

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

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

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


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

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

数组的编辑

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

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

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

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

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

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

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

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

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

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

数组的排序

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

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

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

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

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

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




3.4.2 多维数组

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

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

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

  1. 1 var intArray = [[Int]]()

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

  1. 1 let numbers = [[1,3],[4,7]]

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

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

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

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




3.4.3 数组的遍历

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

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

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

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

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

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

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

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

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

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


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

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

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

猜你在找的Swift相关文章