How to get random element from a set in Swift?

前端 未结 6 997
别那么骄傲
别那么骄傲 2021-01-04 06:41

As of Swift 1.2, Apple introduces Set collection type.

Say, I have a set like:

var set = Set(arrayLiteral: 1, 2, 3, 4, 5)
         


        
6条回答
  •  Happy的楠姐
    2021-01-04 06:54

    Probably the best approach is advance which walks successor for you:

    func randomElementIndex(s: Set) -> T {
        let n = Int(arc4random_uniform(UInt32(s.count)))
        let i = advance(s.startIndex, n)
        return s[i]
    }
    

    (EDIT: Heh; noticed you actually updated the question to include this answer before I added it to my answer... well, still a good idea and I learned something too. :D)

    You can also walk the set rather than the indices (this was my first thought, but then I remembered advance).

    func randomElement(s: Set) -> T {
        let n = Int(arc4random_uniform(UInt32(s.count)))
        for (i, e) in enumerate(s) {
            if i == n { return e }
        }
        fatalError("The above loop must succeed")
    }
    

提交回复
热议问题