美文网首页
Swift集合类

Swift集合类

作者: Rathen | 来源:发表于2019-10-08 17:07 被阅读0次

    创建数组

    字面量创建
    • 可以使用数组字面量来初始化一个数组,它是一种以数组集合来写一个或者多个值的简
      写方式。数组字面量写做一系列的值,用逗号分隔,用方括号括起来
    let array = [1, 2, 3, 4]
    
    字面量创建空数组
    • 创建空数组的时候必须携带类型信息
    • 如果内容已经提供了类型信息,比如说作为函数的实际参数或者已经分类了的变量或常
      量,你可以通过空数组字面量来创建一个空数组
    var array: [Int] = []
    
    初始化器

    使用初始化器有两种方式

    • [类型]()
    • Array<类型>()
    var array = [String]()
    var array1 = Array<String>()
    
    初始化器参数
    • init(repeating repeatedValue: Element, count: Int)
    • init(arrayLiteral elements: Element...)
    • init<S>(_ elements: S) where S : Sequence, Self.Element == S.Element
    • init(from decoder: Decoder) throws
    let array = Array(repeating: "z", count: 10)
    let numbers = [Int](0...7)
    print(numbers)
    let persons = ["zhangsan": 3, "lisi": 4]
    let names = [String](persons.keys)
    print(names)
    

    数组遍历和索引

    数组遍历
    • for-In
    • forEach方法: 无法使用 break 或 continue 跳出或者跳过循环
      使用 return 只能退出当前一次循环的执行体
    • 同时得到索引和值 enumerated()
    • 使用 Iterator 遍历数组
    索引
    • startIndex 返回第一个元素的位置,对于数组来说,永远都是 0。
    • endIndex 返回最后一个元素索引 +1 的位置,对于数组来说,等同于count 。
    • 如果数组为空,startIndex 等于 endIndex 。
    • indices 获取数组的索引区间

    数组的查找操作

    判断是否包含指定元素
    • contains(_:) 判断数组是否包含给定元素
    • contains(where:) 判断数组是否包含符合给定条件的元素
    判断所有元素符合某个条件
    • allSatisfy(_:) 判断数组的每一个元素都符合给定的条件
    查找元素
    • first 返回数组第一个元素(optional),如果数组为空,返回 nil 。
    • last 返回数组最后一个元素(optional),如果数组为空,返回 nil 。
    • first(where:) 返回数组第一个符合给定条件的元素(optional)。
    • last(where:) 返回数组最后一个符合给定条件的元素(optional)。
    • firstIndex(of:) 返回给定的元素在数组中出现的第一个位置(optional)
    • lastIndex(of:) 返回给定的元素在数组中出现的最后一个位置(optional)
      *firstIndex(where:) 返回符合条件的第一个元素的位置(optional)
    • lastIndex(where:) 返回符合条件的最后一个元素的位置(optional)
    查找最大最小元素
    • min() 返回数组中最小的元素
    • max() 返回数组中最大的元素
    • min(by:) 利用给定的方式比较元素并返回数组中的最小元素
    • max(by:) 利用给定的方式比较元素并返回数组中的最大元素

    数组添加和删除

    在末尾添加
    • append(_:) 在末尾添加一个元素
    • append(contentsOf: ) 在末尾添加多个元素
    在任意位置插入
    • insert(_:at:) 在指定的位置插入一个元素
    • insert(contentsOf: at:) 在指定位置插入多个元素
    字符串也是 Collection

    字符串也是 Collection ,Element 是 Character 类型。

    移除单个元素
    • remove(at:) 移除并返回指定位置的一个元素
    • removeFirst() 移除并返回数组的第一个元素
    • removeLast() 移除并返回数组的最后一个元素
    • popLast() 移除并返回数组的最后一个元素(optional),如果数组为空返回nil 。
    移除多个元素
    • removeFirst(:) 移除数组前面多个元素
    • removeLast(:) 移除数组后面多个元素
    • removeSubrange(_:) 移除数组中给定范围的元素
    • removeAll() 移除数组所有元素
    • removeAll(keepingCapacity:) 移除数组所有元素,保留数组容量

    ArraySlice

    移除多个元素
    • ArraySlice 是数组或者其他 ArraySlice 的一段连续切片,和原数组共享内存。
    • 当要改变 ArraySlice 的时候,ArraySlice 会 copy 出来,形成单独内存。
    • ArraySlice 拥有和 Array 基本完全类似的方法
    通过 Drop 得到 ArraySlice
    • dropFirst(:) “移除”原数组前面指定个数的元素得到一个 ArraySlice
    • dropLast(:) “移除”原数组后面指定个数的元素得到一个 ArraySlice
    • drop(:) “移除”原数组符合指定条件的元素得到一个 ArraySlice
    通过 prefix 得到 ArraySlice
    • prefix() 获取数组前面指定个数的元素组成的 ArraySlice
    • prefix(upTo: ) 获取数组到指定位置(不包含指定位置)前面的元素组成的 ArraySlice
    • prefix(through: ) 获取数组到指定位置(包含指定位置)前面的元素组成的 ArraySlice
    • prefix(while: ) 获取数组前面符合条件的元素(到第一个不符合条件的元素截止)组成的 ArraySlice
    通过 suffix 得到 ArraySlice
    • suffix() 获取数组后面指定个数的元素组成的 ArraySlice
    • suffix(from: ) 获取数组从指定位置到结尾(包含指定位置)的元素组成的 ArraySlice
    通过 Range 得到 ArraySlice
    • 可以通过对数组下标指定 Range 获取 ArraySlice,可以使用闭区间、半开半闭区间、单侧区 间、甚至可以只使用 ... 来获取整个数组组成的 ArraySlice 。
    ArraySlice 转为 Array

    ArraySlice 无法直接赋值给一个 Array 的常量或变量,需要使用 Array(slice) 。

    ArraySlice 和原 Array 相互独立

    ArraySlice 和原 Array 是相互独立的,它们添加删除元素不会影响对方

    重排操作

    数组元素的随机化
    • shuffle() 在原数组上将数组元素打乱,只能作用在数组变量上。
    • shuffled() 返回原数组的随机化数组,可以作用在数组变量和常量上。
    数组的逆序
    • reverse() 在原数组上将数组逆序,只能作用在数组变量上。
    • reversed() 返回原数组的逆序“集合表示”,可以作用在数组变量和常量上,该方法不 会分配新内存空间。
    数组的分组
    • partition(by belongsInSecondPartition: (Element) throws -> Bool) 将数组以某个 条件分组,数组前半部分都是不符合条件的元素,数组后半部分都是符合条件的元素。
    数组的排序
    • sort() 在原数组上将元素排序,只能作用于数组变量。
    • sorted() 返回原数组的排序结果数组,可以作用在数组变量和常量上。
    交换数组两个元素
    • swapAt(::) 交换指定位置的两个元素

    拼接操作

    字符串数组拼接
    • joined() 拼接字符串数组里的所有元素为一个字符串
    • joined(separator:) 以给定的分隔符拼接字符串数组里的所有元素为一个字符串
    元素为 Sequence 数组的拼接
    • joined() 拼接数组里的所有元素为一个更大的 Sequence
    • joined(separator:) 以给定的分隔符拼接数组里的所有元素为一个更大的 Sequence

    Set

    Set 的概念

    Set 是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成 Set 的 这些对象则称为该 Set 的元素。

    集合的三个特性
    • 确定性 :给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一。
    • 互斥性 : 一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
    • 无序性 : 一个集合中,每个元素的地位都是相同的,元素之间是无序的。
    Swift 里面的集合
    • Swift 的集合类型写做 Set<Element>,这里的 Element 是 Set 要储存的类型。不同与数 组,集合没有等价的简写。
    • 使用初始化器语法来创建一个确定类型的空 Set 使用数* 组字面量创建 Set
    Set 类型的哈希值
    • 为了能让类型储存在 Set 当中,它必须是可哈希的——就是说类型必须提供计算它自身哈希值的方法。
    • 所有 Swift 的基础类型(比如 String, Int, Double, 和 Bool)默认都是可哈希的,并且可以用于 Set 或者 Dictionary 的键。
    • 自定义类型需要实现 Hashable 协议
    struct Person {
        var name: String
        var age: Int
    }
    
    extension Person: Hashable {
        func hash(into hasher: inout Hasher) {
            hasher.combine(age)
            hasher.combine(name)
        }
    }
    
    var person: Set<Person> = [Person(name: "张三", age: 20), Person(name: "李四", age: 25)]
    
    
    遍历 Set
    • 可以使用For in遍历Set
    • 因为 Set 是无序的,如果要顺序遍历 Set,使用 sorted()方法。

    相关文章

      网友评论

          本文标题:Swift集合类

          本文链接:https://www.haomeiwen.com/subject/amrnuctx.html