我是Swift Lang的新手,看过很多教程,但不清楚 - 我的问题是Array
,Set
和Dictionary
集合类型之间的主要区别是什么?
答案 0 :(得分:26)
以下是不同类型之间的实际差异:
数组是有效排序的列表,用于在订单很重要的情况下存储信息列表。
例如,在tableView中显示的社交网络应用中的帖子可以存储在数组中。
集合在顺序无关紧要的意义上是不同的,并且这些将在订单无关紧要的情况下使用。
当您需要确保项目仅在集合中 一次 时,
字典用于存储键,值对,并且在您希望使用键轻松查找值时使用,就像在字典中一样。
例如,您可以存储项目列表以及指向字典中有关这些项目的更多信息的链接。
希望这会有所帮助:)
(有关更多信息以及查找Apple自己的定义,请查看Apple https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html上的Apple指南
答案 1 :(得分:9)
详细文档可在Apple's guide上找到。以下是从那里提取的一些快速定义:
阵列
数组在有序列表中存储相同类型的值。相同的值可以在不同的位置多次出现在数组中。
集
集合在集合中存储相同类型的不同值,没有定义的顺序。当项目的顺序不重要时,或者当您需要确保项目只出现一次时,您可以使用集合而不是数组。
词典
字典存储相同类型的键与集合中相同类型的值之间的关联,而没有定义的排序。每个值都与唯一键相关联,该唯一键充当字典中该值的标识符。与数组中的项目不同,字典中的项目没有指定的顺序。当您需要根据标识符查找值时,可以使用字典,这与使用真实字典查找特定单词的定义的方式非常相似。
答案 2 :(得分:5)
旧线程还值得谈谈性能。
在数组或字典中使用给定的N元素时,当您尝试访问元素或添加或删除对象时,值得考虑性能。
要访问,随机元素的成本与访问第一个或最后一个元素相同,因为元素会按顺序相互跟随,因此可以直接访问它们。他们将花费你一个周期。
插入元素代价高昂。如果你添加到开头它将花费你1个周期。插入中间,其余部分需要移动。在最坏的情况下(平均N / 2个周期),它可能花费你多达N个周期。如果你追加到最后并且阵列中有足够的空间,则需要花费1个周期。否则整个阵列将被复制,这将花费你N周期。 这就是在操作开始时为数组分配足够空间非常重要的原因。
从开头或结尾删除会花费你1.从中间班次操作是必需的。平均而言是N / 2.
使用给定属性查找元素将花费您N / 2周期。
因此对大型阵列要非常谨慎。
虽然字典混乱,但它们可以为您带来一些好处。当密钥被散列并存储在散列表中时,任何给定的操作都将花费您1个循环。唯一的例外是查找具有给定属性的元素。在最坏的情况下,它可能花费你N / 2周期。通过巧妙的设计,您可以将属性值指定为字典键,因此无论内部有多少元素,查找都只需要1个周期。