集合中的项目顺序已更改,Set,Swift

ton*_*ran 2 set ios swift

我创建了2套包含String如下的套装

 let set1 : Set<String>   =   (["07:00", "QShift", "PRN"])
 let set2 : Set<String>   =   (["07:15", "QShift", "PRN"])
Run Code Online (Sandbox Code Playgroud)

首先,我认为每个集合中的字符串顺序与添加时的顺序完全相同.但是我错了set1,控制台给了我这个

Printing description of set1:
? 3 elements
  - [0] : "QShift"
  - [1] : "PRN"
  - [2] : "07:00" { ... }

Printing description of set2:
? 3 elements
  - [0] : "07:15"
  - [1] : "QShift"
  - [2] : "PRN" { ... }
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么字符串的顺序set1已改为QShift, PRN, 07:00

Evg*_*kan 8

因为Set是无序的数据结构.

设置参考:

集合在集合中存储相同类型的不同值,没有定义的顺序.当项目的顺序不重要时,或者当您需要确保项目仅出现一次时,您可以使用集合而不是数组.

您应该查看NSOrderedSet类引用,了解更多API:

NSOrderedSet及其子类NSMutableOrderedSet将编程接口声明为有序的对象集合.

  • 你应该看看数组.NSOrderedSet主要是为Core Data添加的(直到那时才存在),不应该是你的第一选择.请参阅http://nshipster.com/nsorderedset/ (3认同)
  • 同意.NSOrderedSet是一个麻烦的类型,对于Core Data来说甚至不能很好地工作(不幸的是).数组或字典几乎总是正确的集合类型. (2认同)
  • 但有时您需要排序和快速包含检查——数组和字典都不提供这一点。Swift 确实需要 OrderedSet (和 OrderedDictionary)类型。 (2认同)