Skip to content

14.1_创建初始化集合

集合的魅力:无序与唯一 ✨

集合(Set)是 Swift 中一个非常强大的数据结构,它允许你存储相同类型且无序的唯一值。想象一下,你有一个装满独特物品的盒子,这就是集合!它与数组(Array)不同,数组可以包含重复项并保持元素的顺序。集合的这种特性在很多场景下都非常有用,比如去重或进行高效的成员检测。

创建空集合:两种便捷方式 🚀

在 Swift 中,创建空集合有几种简单的方法。最常见的是使用初始化语法。你可以明确指定集合存储的元素类型。例如,如果你想创建一个存储 String 类型的空集合,可以这样做:

swift
var uniqueNames = Set<String>()

这种方式清晰地表明了集合的意图。另一种创建空集合的方法是使用类型推断。如果你立即向集合中添加元素,Swift 就能自动推断出集合的类型。

使用数组字面量初始化集合 💡

你也可以使用数组字面量来初始化集合,这是一种非常方便快捷的方式。Swift 会自动将数组字面量中的元素转换为集合的唯一成员。例如,如果你有一些水果名称,并想确保它们都是唯一的,集合就能完美胜任:

swift
let favoriteFruits: Set<String> = ["苹果", "香蕉", "橙子", "苹果"]
print(favoriteFruits) // 输出: ["香蕉", "橙子", "苹果"] (顺序可能不同)

你会发现,即使你在字面量中重复了“苹果”,集合也只会存储一个“苹果”。这就是集合“唯一性”的强大之处!这种去重能力在处理用户输入或数据清洗时特别有用。

从现有数组创建集合:去重利器 🎯

将现有数组转换为集合是实现数据去重最直接有效的方法之一。假设你从某个数据源获取了一个包含重复项的列表,而你只需要其中的唯一值。你可以直接使用数组作为集合的初始化参数:

swift
let allNumbers = [1, 2, 3, 2, 4, 1, 5]
let uniqueNumbers = Set(allNumbers)
print(uniqueNumbers) // 输出: [5, 2, 3, 1, 4] (顺序可能不同)

这个例子清晰地展示了集合如何轻松地从 allNumbers 数组中移除了重复的 12。这种方法在处理大量数据时,能显著提高效率,因为它避免了手动遍历和检查重复项的复杂逻辑。集合的平均查找时间复杂度通常是 $$O(1)$$,这比数组的 $$O(n)$$ 效率高得多!

集合的类型约束:哈希值是关键 🔑

要记住,集合中的元素类型必须遵循 Hashable 协议。这意味着集合中的每个元素都必须能够计算出一个哈希值,以便集合能够高效地存储和检索它们。Swift 的基本数据类型,如 StringIntDoubleBool,都默认遵循 Hashable 协议。如果你创建自定义类型并希望将其存储在集合中,你需要确保你的自定义类型也遵循 Hashable 协议。这通常意味着你需要实现 hash(into:) 方法和 == 运算符。这是一个非常重要的概念,它确保了集合的内部机制能够正常工作。

本站使用 VitePress 制作