初始化

字面量创建截屏2021-10-26 上午9.35.52.png

使用初始化器截屏2021-10-26 上午9.38.43.png

还可以使用初始化器的参数进行初始化
截屏2021-10-26 上午9.40.51.png

数组遍历

  • for-in
  • foreach

无法使用break或continue跳出或跳过循环
使用return只能退出当前一次的循环体

  • 同时得到索引和值(enumerated)

    1. let numbers = [Int](2...7)
    2. for (index, num) in numbers {
    3. print("The index is: \(indedx)"
    4. print(num)
    5. }
  • 使用Iterator遍历数组 ```swift let numebrs = Int let numIterator = numbers.makeIterator() while let num = numIterator.next() {

    1. print(num)

    }

  1. <a name="uum6A"></a>
  2. # 数组中的索引
  3. - startIndex返回第一个元素的位置,对于数组来说,永远都是0.
  4. - endIndex返回最后一个元素索引+1的位置,对于数组来说等同与count
  5. - 如果数组为空,startIndex等于endIndex
  6. <a name="hUoOt"></a>
  7. # 访问和操作数组
  8. <a name="QQb7R"></a>
  9. ## 查找操作
  10. <a name="BIH0g"></a>
  11. #### 判断是否包含指定元素(contains)
  12. - contains(_:)判断数组是否包含给定元素
  13. - contains(where:)判断数组是否包含符合给定条件的元素
  14. <a name="NzIw2"></a>
  15. #### 判断所有元素符合某个条件(allSatisfy)
  16. ```swift
  17. var array = [10, 20, 45, 30, 98, 101, 30, 4]
  18. print(array.allSatisfy({ $0 > 10 })) //false
  19. print(array.allSatisfy({ $0 >= 4 })) //true

查找元素

  • first 返回数组第一个元素(optional),如果数组维空,返回nil。
  • last 返回数组最后一个元素(optional),如果数组为空,返回nil。
  • first(where:) 返回数组第一个符合给定条件的元素(optional)。
  • last(where:) 返回数组最后一个符合给定条件的元素(optional)。
    1. var array = [10, 20, 45, 30, 98, 101, 30, 4]
    2. print(array.first)
    3. //输出 Optional(10)
    4. print(array.last)
    5. //输出 Optional(4)
    6. print(array.first(where: { $0 > 25 }))
    7. //输出 Optional(45)
    8. print(array.last(where: { $0 > 25 }))
    9. //输出 Optional(30)

查找索引

  • firstIndex(of:) 返回给定的元素在数组中出现的第一个位置 (optional)
  • lastIndex(of:) 返回给定的元素在数组中出现的最后一个位置 (optional)
  • firstIndex(where:) 返回符合条件的第一个元素的位置 (optional)
  • lastIndex(where:) 返回符合条件的最后一个元素的位置 (optional) ```swift var array = [10, 20, 45, 30, 98, 101, 30, 4] print(array.firstIndex(of: 30) //输出 Optional(3) print(array.lastIndex(of: 20) //输出 Optional(1)

print(array.firstIndex(where: { $0 > 25 })) //输出 Optional(2) print(array.lastIndex(where: { $0 > 25 })) //输出 Optional(6)

  1. <a name="xeIeT"></a>
  2. #### 查找最大最小元素
  3. - min(by:) 利用给定的方式比较元素并返回数组中的最小元素
  4. - max(by:) 利用给定的方式比较元素并返回数组中的最大元素
  5. ```swift
  6. var array = [{45, "error1'}, {23, "error2"}, {30, "error3"}]
  7. print(array.min { a, b in a.0 < b.0 })
  8. // 输出 Optional((23, "error2"))
  9. print(array.max { a, b in a.0 < b.0 })
  10. // 输出 Optional((45, "error1"))

添加和删除

在末尾添加

  • append(_:) 在末尾添加一个元素
  • append(contentsOf:) 在末尾添加多个元素
    1. var numbers = [Int](2...7)
    2. numbers.append(100)
    3. print(numbers)
    4. //输出[2, 3, 4, 5, 6, 7, 100]
    5. numbers.append(contentsOf: 100...105)
    6. print(numbers)
    7. //输出[2, 3, 4, 5, 6, 7, 100, 101, 102, 103, 104, 105]

在任意位置插入

  • insert(_at:) 在指定的位置插入一个元素
  • insert(contentsOf: at:) 在指定的位置插入多个元素

    1. var numbers = [Int](2...7)
    2. numbers.insert(-1, at: 0)
    3. print(numbers)
    4. // 输出 [-1, 2, 3, 4, 5, 6, 7]
    5. numbers,insert(contentsOf: -2...1, at: 0)
    6. print(numbers)
    7. // 输出 [-2, -1, 0, 2, 3, 4, 5, 6, 7]

    移除单个元素

  • remove(at:) 移除并返回指定位置的一个元素

  • removeFirst() 移除并返回数组的第一个元素
  • removeFirst(:) 移除数组前面多个元素,例如removeFisrt(2)是移除数组前面两个元素
  • removeLast(:) 移除数组后面多个元素
  • removeSubrange(_:) 移除数组中给定范围的元素
  • removeAll() 移除数组所有元素
  • removeAll(keepingCapacity:) 移除数组所有元素,保留数组的容量

ArraySlice(数组切片)

(类似于String与SubString之间的关系)

  • ArraySlice是数组或者其他ArraySlice的一段连续切片,和原数组共享内存。
  • 当要改变ArraySlice的时候,ArraySlice会copy出来,形成单独内存。
  • ArraySlice拥有和Array基本完全类似的方法。

移除多个切片

使用Drop得到ArraySlice

截屏2021-10-27 下午2.09.54.png

通过prefix得到ArraySlice

截屏2021-10-27 下午2.11.15.png

通过suffix得到ArraySlice

截屏2021-10-27 下午2.15.45.png

通过Range得到ArraySlice

截屏2021-10-27 下午2.16.58.png

ArraySlice转Array

  • ArraySlice无法直接赋值给一个Array的常量或变量,需要使用Array(slice)
    1. var array = [5, 2, 10, 1, 0, 100, 46, 99]
    2. let slice = array[3...5]
    3. array = Array(slice)

ArraySlice和原Array相互独立

  • ArraySlice和原Array是相互独立的,它们添加删除元素不会影响对方。截屏2021-10-27 下午2.23.48.png

重排操作

数组元素的随机化

  • shuffle() 在原数组上将数组元素打乱,只能作用在数组变量上。
  • shuffled() 返回原数组的随机化数组,可以作用在数组变量和常量上。
    1. var array = [Int](1...8)
    2. array.shuffle()
    3. print(array)
    4. //输出[1, 5, 3, 6, 7, 2, 4, 8]
    5. let array2 = [Int}(1...8)
    6. array2.shuffled()
    7. print(array2)
    8. //输出[6, 3, 2, 1, 7, 8, 4, 5]

数组的逆序

  • reverse() 在原数组上将数组逆序,只能作用在数组变量上。
  • reversed() 返回原数组的逆序“集合表示”,可以作用在数组变量和常量上,改方法不回分配新内存空间。
    1. var array = [Int](1...8)
    2. array.reverse()
    3. print(array)
    4. //输出 [8, 7, 6, 5, 4, 3, 2, 1]
    5. let array1 = [Int](1...8)
    6. var array2 = array1.reversed()
    7. print(array2)
    8. //输出 ReversedCollection<Array<Int>>(_base: [1, 2, 3, 4, 5, 6, 7, 8])

数组的分组截屏2021-10-27 下午2.44.14.png

数组的排序

截屏2021-10-27 下午2.46.40.png

交换数组的两个元素

  • swqpAt(::) 交换指定位置的两个元素
    1. var array = [Int](1...8)
    2. array.swapAt(0, 7)
    3. print(array)
    4. //输出 [8, 2, 3, 4, 5, 6, 7, 1]

数组的拼接操作

字符串数组的拼接

  • joined() 拼接字符串数组里的所有元素为一个数组。
  • joined(separator:) 以给定的分隔符拼接字符串数组的所有元素为一个字符串
    1. var array = ["Hello", "world"]
    2. print(array.joined())
    3. //输出 Helloworld
    4. print(array.joined(separator: ","))
    5. //输出 Hello,world

元素为Sequence数组的拼接

截屏2021-10-27 下午2.57.08.png