数组(Array)和集合(Set)都是集合类型,并且有很多相似之处,但是数组在日常开发中更为常用。在面试中,经常被问到两者的异同,今天我们就来探讨一下这两者之间的区别。首先,它们都实现了ExpressibleByArrayLiteral 协议,初始化语法糖相同,即可以直接通过中括号 [] 进行初始化。如果定义时未指定类型为 Set,默认生成的是数组。数组和集合都是值类型。如果使用 let 定义 Set,使用 insert 函数添加对象时会遇到错误,因为 Set 不能包含重复元素。在添加对象的方式上,数组使用 append 函数,而集合使用 insert 函数。插入集合中的函数返回一个元组类型,包含插入是否成功以及插入的元素,通过该函数可轻易判断是否存在相同的元素。另一个主要区别在于元素的唯一性。数组可以包含多个相同的值,而集合永远不会包含重复项。这也是插入函数返回布尔值的原因,用来表示插入是否成功。数组和集合在元素顺序上也有所不同。数组会保证元素的顺序,先 append 的在前面,后 append 的在后面。而集合是无序的,不保证元素的位置。在元素类型方面,Set 要求子元素必须实现 Hashable 协议(可哈希),而 Array 对子元素没有此要求。大多数标准库中的类型(如字符串、数字、Bool)都是可哈希的,但自定义类型需要先遵守 Hashable 协议才能存入 Set 中。在性能方面,Array 使用连续内存存储元素,访问元素速度快但插入和删除元素可能需要移动其他元素,导致性能下降。Set 使用哈希表进行存储,查找、添加、删除操作速度都很快(平均时间复杂度为O(1)),但会消耗更多内存。总之,数组适用于需要保持元素顺序和可能包含重复值的场景,而集合适用于需要去除重复值的场景。在选择使用哪种集合类型时,需要根据具体需求来判断。