2016-11-02 13 views
1

Swift 3 IteratorProtocol文档说:“复制迭代器是安全的,但通过调用其迭代器的next()方法来推进迭代器的副本可能会使该迭代器的其他副本失效。枚举集合中的元素对(Swift 3)

所以,这可能无法正常工作:

var i = set.makeIterator() 
    while let obji = i.next() { 
     var j = i 
     while let objj = j.next() { // Possible error : might invalidate i 
      ...some code... 
     } 
    } 

所以,我写了这个:

var objects = [Object](set) 
for i in 0..<objects.count { 
    for j in (i+1)..<objects.count { 
     ...some code... 
    } 
} 

但不是有没有办法做同样的事情,而不在一个数组复制集?

回答

0

Set符合Sequence所以它很容易

let set = Set<Int>([1, 4, 7, 9]) 
for member in set { 
    print(member) 
} 
+1

如果我理解正确的问题,OP需要嵌套循环枚举所有*对*集合中的元素。 –

+2

@MartinR oops,可能是,但*对*将*随机对*由于一组的无序性质。 – vadian

+0

@MartinR,你是对的,我需要一个嵌套循环来枚举集合中的所有元素对。我编辑了问题的标题以清楚地说明问题。 –