首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift设置为数组

Swift设置为数组
EN

Stack Overflow用户
提问于 2015-03-14 15:47:33
回答 3查看 128.2K关注 0票数 222

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-14 16:06:34

您只需使用以下命令即可创建一个包含给定Swift Set中所有元素的数组

代码语言:javascript
复制
let array = Array(someSet)

这是可行的,因为Set符合SequenceType协议,并且Array可以用序列进行初始化。示例:

代码语言:javascript
复制
let mySet = Set(["a", "b", "a"])  // Set<String>
let myArray = Array(mySet)        // Array<String>
print(myArray) // [b, a]
票数 418
EN

Stack Overflow用户

发布于 2016-10-25 11:00:32

对于Swift 2.x和更高版本(来自Swift编程语言指南中的Collection Types),当前的答案似乎是迭代集合项目,如下所示:

代码语言:javascript
复制
for item in myItemSet {
   ...
}

或者,使用"sorted“方法:

代码语言:javascript
复制
let itemsArray = myItemSet.sorted()

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

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

代码语言:javascript
复制
let itemsArray = myItemSet.map { $0 }

它将构建一个Set拥有的类型的数组,如果您需要它是一个特定类型的数组(例如,从一组未声明为类型化set的托管对象关系中获得权限),您可以这样做:

代码语言:javascript
复制
var itemsArray : [MyObjectType] = []
if let typedSet = myItemSet as? Set<MyObjectType> {
 itemsArray = typedSet.map { $0 }
}
票数 5
EN

Stack Overflow用户

发布于 2015-11-24 21:34:34

调用此方法并传递您的set

代码语言:javascript
复制
func getArrayFromSet(set:NSSet)-> NSArray {

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

如下所示:

代码语言:javascript
复制
var letters:Set = Set<String>(arrayLiteral: "test","test") // your set
print(self.getArrayFromSet(letters))
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29046695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档