首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSOrderedSet上迭代

在NSOrderedSet上迭代
EN

Stack Overflow用户
提问于 2014-10-28 16:22:52
回答 3查看 13.9K关注 0票数 19

我正在尝试迭代NSOrderedSet的一个实例。如下所示:

代码语言:javascript
复制
func myFunc() {
    var orderedSet = NSOrderedSet(array: [ 42, 43, 44])

    for n in orderedSet {
        NSLog("%i", n)
    }
}

对于...however循环行,会产生以下编译器错误:

代码语言:javascript
复制
'NSOrderedSet' does not have a member named 'Generator'

现在我可以将其转换为如下所示的数组:

代码语言:javascript
复制
    for n in orderedSet.array {
        NSLog("%i", n)
    }

...but我想知道是否有更好的解决方案?

我也很想知道为什么可以遍历一个集合而不是一个有序的集合?NSOrderedSet实现了NSFastEnumeration,所以它应该是可以工作的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-28 16:43:34

您可以使用以下命令遍历有序集

代码语言:javascript
复制
let orderedSet = NSOrderedSet(array: [ 42, 43, 44])
orderedSet.enumerateObjectsUsingBlock { (elem, idx, stop) -> Void in
    println("\(idx): \(elem)")
}

更新:从Swift 1.2 (Xcode6.3)开始,NSOrderedSet符合SequenceType,可以使用for ... in ...枚举

代码语言:javascript
复制
let orderedSet = NSOrderedSet(array: [ 42, 43, 44])
for elem in orderedSet {
    println(elem)
}
票数 41
EN

Stack Overflow用户

发布于 2014-10-28 16:37:01

NSOrderedSet不符合SequenceTypeNSOrderedSetNSObject的子类,而不是想象中的NSSet。我猜苹果的工程师们忽视了这一点。

票数 2
EN

Stack Overflow用户

发布于 2015-01-10 06:20:05

最快、最简单、最通用的解决方案是根据文档将浅层复制到O(1)中的数组。这将允许您使用Swift的其他函数技术和函数。

代码语言:javascript
复制
import Swift
import Foundation


println("Simplest, most accessible, O(1) performance: shallow copy to array:")

var set = NSOrderedSet(array: map(0...7) { d in d })
for d in set.array as [Int] {
    print("\t\(d)")
}

println("\n\nIn general - for other types and cases, you could create a sequence:")

extension NSOrderedSet {
    func sequenceOf<T>(t:T.Type) -> SequenceOf<T> {
        var current = 0
        return SequenceOf(GeneratorOf({ () -> T? in
            return current < self.count ? self.objectAtIndex(current++) as? T : nil
        }))
    }
}

for d in set.sequenceOf(Int.self) {
    print("\t\(d)")
}

最简单、最易访问的O(1)性能:浅拷贝到数组:

0 1 2 3 4 5 6 7

一般来说,对于其他类型和情况,您可以创建一个序列:

0 1 2 3 4 5 6 7

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26603657

复制
相关文章

相似问题

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