集合与数组

集合是一种集合类型(一种将相关项组合在一起的方式),类似于数组,但有一些区别。 集合将不同的值存储为无序列表,而数组是可以具有重复值的有序列表。 另外,一个集合只能采用符合Hashable协议的类型,这使得该集合可以维护一组独特的值,并使其在数组上的搜索和检索速度比数组快得多。 所有基础类型都是可哈希的,并且可以与集合一起使用。 如果要使用一组自己的类或结构,则需要实现Hashable协议。

何时使用套装!

在元素的顺序不重要的情况下,或者需要确保某项仅出现一次的情况下。

让我们仔细看看!

让我们选择一个问题,并尝试使用一组解决方案,一次使用数组解决问题,然后根据执行时间和迭代次数决定哪个更快。

我们有一本词典,其中包含有关州及其州首府的信息,并且我们想知道哪个州的州首府不包含与州名相同的字符。 我们将首先使用一组回答这个问题。 我们将从在字典中进行迭代并创建两组字符开始,一组用于州名,另一组用于大写名。 然后我们将检查相交的结果-集合的基本操作之一,确定两个集合具有哪些共同的值-然后我们可以得到问题的答案。 容易吧?

代码将是:

现在,让我们尝试通过为状态名称和大写字母的名称创建一个字符数组来解决该问题,然后在大写字母数组的内部循环以检查每个字符是否存在于相应状态的数组中,或者不。 此代码将是:

如我们所见:

  • 这两个函数都会重复前两个步骤50次,因为我们的词典有50个键。
  • 使用一组,我们能够在一行代码中执行比较,并且该行将针对每个状态执行一次。
  • 使用数组,我们需要一个for循环,该循环将重复50次乘以每个大写字母名称中的字符数。
  • 因此,很明显,使用集合比使用数组来解决这些类型的问题要快。 可以通过调用每个函数100次并测量每个函数的平均执行时间来证明这一点,如下面的屏幕截图所示。

尽管在我们的示例中运行时间的差异很小,但是当与大型数据集一起使用时,这可能会产生很大的差异,因此,请始终考虑使用集作为传统数组的替代方法。