NSSet可以使用Set . allobjects()转换为Array,但在新的Set (Swift 1.2引入)中没有这样的方法。它仍然可以通过将Swift Set转换为NSSet并使用allObjects()方法来完成,但这不是最佳的。


当前回答

Swift 2的当前答案。x和更高(来自Swift编程语言指南的集合类型)似乎是迭代Set项,如下所示:

for item in myItemSet {
   ...
}

或者,使用“sorted”方法:

let itemsArray = myItemSet.sorted()

Swift的设计者似乎不喜欢allObjects作为一种访问机制,因为set并不是真正有序的,所以他们想确保你在没有应用显式排序的情况下不会得到数组。

如果你不想要排序的开销,也不关心顺序,我通常使用map或flatMap方法,这应该更快地提取数组:

let itemsArray = myItemSet.map { $0 }

它将构建一个Set所持有的类型的数组,如果你需要它是一个特定类型的数组(比如,来自一组未声明为类型化集的托管对象关系的标题),你可以这样做:

var itemsArray : [MyObjectType] = []
if let typedSet = myItemSet as? Set<MyObjectType> {
 itemsArray = typedSet.map { $0 }
}

其他回答

你可以用给定Swift中的所有元素创建一个数组 简单地用

let array = Array(someSet)

这是因为Set符合SequenceType协议 数组可以用序列初始化。例子:

let mySet = Set(["a", "b", "a"])  // Set<String>
let myArray = Array(mySet)        // Array<String>
print(myArray) // [b, a]

调用此方法并传递您的集合

func getArrayFromSet(set:NSSet)-> NSArray {

return set.map ({ String($0) })
}

像这样:

var letters:Set = Set<String>(arrayLiteral: "test","test") // your set
print(self.getArrayFromSet(letters))

Swift 2的当前答案。x和更高(来自Swift编程语言指南的集合类型)似乎是迭代Set项,如下所示:

for item in myItemSet {
   ...
}

或者,使用“sorted”方法:

let itemsArray = myItemSet.sorted()

Swift的设计者似乎不喜欢allObjects作为一种访问机制,因为set并不是真正有序的,所以他们想确保你在没有应用显式排序的情况下不会得到数组。

如果你不想要排序的开销,也不关心顺序,我通常使用map或flatMap方法,这应该更快地提取数组:

let itemsArray = myItemSet.map { $0 }

它将构建一个Set所持有的类型的数组,如果你需要它是一个特定类型的数组(比如,来自一组未声明为类型化集的托管对象关系的标题),你可以这样做:

var itemsArray : [MyObjectType] = []
if let typedSet = myItemSet as? Set<MyObjectType> {
 itemsArray = typedSet.map { $0 }
}

添加:

Swift没有定义集合和字典的顺序。因此,您应该使用sorted()方法来防止得到意想不到的结果,例如您的数组可能像["a","b"]或["b","a"],而您不希望这样。

要解决这个问题:

为集

var example:Set = ["a","b","c"]
let makeExampleArray = [example.sorted()]
makeExampleArray 

结果: [“a”,“b”,“c”]

没有排序()

它可以是:

["a","b","c"] or ["b","c","a",] or ["c","a","b"] or ["a","c","b"] or ["b","a","c"] or ["c","b","a"] 

简单的计算:3!= 6

我创建了一个简单的扩展,给你一个无序数组作为Set在Swift 4.0的属性。

extension Set {
    var array: [Element] {
        return Array(self)
    }
}

如果需要排序数组,可以添加额外的计算属性,也可以修改现有的计算属性以满足自己的需要。

要使用此功能,只需调用

let array = set.array