集合类型
在Swift语言中一共提供了3中集合类型:Array数组、Set集合和Dictionary字典。Array类型是一种有序集合,放入其中的数据都有一个编号,且编号从0开始一次递增。通过这些下标编号,我们可以找到Array数组中对应的值。Set集合是一组无序的数据,其存入的数据没有编号,可以使用遍历的方法获取其中的所有数据。Dictionary集合是一种键值映射结构,其中每存入一个值都要对应一个特定的键,且键不能重复,其中每存入一个值都要对应一个特定的键,且键不能重复,通过键可以直接获取到对应的值。
3种集合类型异同图:
Array数组
Array数组可以存放任意类型的数据,但是数据类型必须统一,声明Int型数组,示例如下:
var array1:[Int]
var array2:Array<Int>
-
创建数组,创建数组由两种方式,一种是使用Array构造方法,一种是使用中括号创建
// 创建空数组 array1 = [] array2 = Array() array1 = [1, 2, 3] array2 = Array(arrayLiteral: 1, 2, 3)
注意:与String类型相似,空数组的含义并非是变量为nil,而是数组中的元素为空,Swift中只有Optional类型的变量可以为nil。
Swift语言中Array采用结构体来实现,对于大量重复元素的数组,可以采用快解放发来创建,示例如下:
// 创建大量相同元素的数组 // 创建有10个String类型元素的数组,并且每个元素都为字符串"Hello" var array3 = [String](repeating: "hello", count: 10) // 创建有10个Int类型元素的数组,并且每个元素都为1 var array4 = [Int](repeating: 1, count: 10)
数组在声明时,必须要明确其类型,可以不用显式的指定类型,如果声明时设置了初始值,则编译器会根据赋值类型自动推断出数组的类型。
-
编辑数组(增、删、查、改)
示例如下:
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9] // 获取数组中元素的个数 9 array.count // 检查数组是否为空数组 if array.isEmpty {print("array为空数组")} // 通过下标获取数组中的元素 1 var a = array[0] // 获取区间元素组成的新数组 [1, 2, 3, 4] var subArray = array[0...3] // 获取数组的第1个元素 var b = array.first // 获取数组的最后的一个元素 var c = array.last // 修改数组中区间范围的元素 array[0...3] = [1, 2, 3, 4] // 向数组中追加一个元素 array.append(10) // 向数据中追加一组元素 array.append(contentsOf: [11, 12, 13]) // 向数组中的某个位置插入一个元素 array.insert(0, at: 0) // 向数组中的某个位置插入一组元素 array.insert(contentsOf: [-2, -1], at: 0) // 移除数组中某个位置的元素 array.remove(at: 1) // 移除数组中首个位置的元素 array.removeFirst() // 移除数组中最后一个位置的元素 array.removeLast() // 移除前几位元素,参数为要移除的元素的个数 array.removeFirst(2) // 移除后几位元素,参数为要移除的元素的个数 array.removeLast(2) // 移除一个范围内的元素 array.removeSubrange(0...2) // 替换一个范围内的元素 array.replaceSubrange(0...2, with: [0, 1]) // 移除所有元素 array.removeAll() // 判断数组中是否包含某个元素 if array.contains(1) { print(true) }
-
遍历数组
使用for-in遍历数组,示例如下:
// Int型数组 let arrayLet = [0, 1, 2 ,3, 4] // (Int, Int)型数组 let arrayLet2 = [(1,2), (2,3), (3,4)] // 直接遍历数组 for item in arrayLet { print(item) } // 进行数组枚举遍历,将输出(0,0)(1,1)(2,2)(3,3)(4,4) for item in arrayLet.enumerated() { print(item) } // 进行数组角标遍历 for index in arrayLet2.indices { print(arayLet2[index], separatir: " ") }
enumerated()方法会返回一个元组集合,将数组中的下标和对应元素返回,可以通过遍历数组的下标来获取数组中的元素,其下标可以为Int类型,而String类型中的下标是严格的Index类型。Array类型中的indices属性,这个属性将返回一个Range范围,此范围即是数组下标的范围。
-
对数组排序
如果数组中的元素是基本数据类型,可以使用系统提供的sort方法来排序,如果是一些自定义的类型,开发者也可以对sort(isOrderedBefore:)方法传入闭包实现新的排序规则,进行数组排序示例代码如下:
var arraySort = [1, 3, 5, 6, 7] // 从大到小排序 arraySort = arraySort.sorted(isOrderedBefore: >) // 从小到大排序 arraySort = arraySort.sorted(isOrderedBefore: <)
-
获取数组中的最大值与最小值
var arraySort = [1, 3, 5, 6, 7] // 获取数组中的最大值 arraySort.max() // 获取数组中的最小值 arraySort.min()