淘先锋技术网

首页 1 2 3 4 5 6 7

集合类型

在Swift语言中一共提供了3中集合类型:Array数组、Set集合和Dictionary字典。Array类型是一种有序集合,放入其中的数据都有一个编号,且编号从0开始一次递增。通过这些下标编号,我们可以找到Array数组中对应的值。Set集合是一组无序的数据,其存入的数据没有编号,可以使用遍历的方法获取其中的所有数据。Dictionary集合是一种键值映射结构,其中每存入一个值都要对应一个特定的键,且键不能重复,其中每存入一个值都要对应一个特定的键,且键不能重复,通过键可以直接获取到对应的值。

3种集合类型异同图:

在这里插入图片描述

Array数组

Array数组可以存放任意类型的数据,但是数据类型必须统一,声明Int型数组,示例如下:

var array1:[Int]
var array2:Array<Int>
  1. 创建数组,创建数组由两种方式,一种是使用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)
    

    数组在声明时,必须要明确其类型,可以不用显式的指定类型,如果声明时设置了初始值,则编译器会根据赋值类型自动推断出数组的类型。

  2. 编辑数组(增、删、查、改)

    示例如下:

    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)
    }
    
  3. 遍历数组

    使用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范围,此范围即是数组下标的范围。

  4. 对数组排序

    如果数组中的元素是基本数据类型,可以使用系统提供的sort方法来排序,如果是一些自定义的类型,开发者也可以对sort(isOrderedBefore:)方法传入闭包实现新的排序规则,进行数组排序示例代码如下:

    var arraySort = [1, 3, 5, 6, 7]
    // 从大到小排序
    arraySort = arraySort.sorted(isOrderedBefore: >)
    // 从小到大排序
    arraySort = arraySort.sorted(isOrderedBefore: <)
    
  5. 获取数组中的最大值与最小值

    var arraySort = [1, 3, 5, 6, 7]
    // 获取数组中的最大值
    arraySort.max()
    // 获取数组中的最小值
    arraySort.min()