Get a random unique element from an Array until all elements have been picked in Swift

前端 未结 5 1473
不思量自难忘°
不思量自难忘° 2020-12-12 08:32

I have the following array:

var notebookCovers = [\"cover1\", \"cover2\", \"cover3\", \"cover4\", \"cover4\", \"cover6\", \"cover7\", \"cover8\", \"cover9\"         


        
5条回答
  •  情深已故
    2020-12-12 08:33

    If you want to create a looping solution:

    let originalSet = Set(arrayLiteral: "a","b","c")
    var selectableSet = originalSet
    
    func repeatingRandomObject() -> String {
        if selectableSet.isEmpty {
            selectableSet = originalSet
        }
    
        return selectableSet.remove(selectableSet.randomElement()!)!
    }
    

    force unwrapping is kind of safe here, since we know that the result will never be nil. If you don't want to force unwrap:

    let originalSet = Set(arrayLiteral: "a","b","c")
    var selectableSet = originalSet
    
    func repeatingRandomObject() -> String? {
        if selectableSet.isEmpty {
            selectableSet = originalSet
        }
    
        guard let randomElement = selectableSet.randomElement() else { return nil }
        return selectableSet.remove(randomElement)
    }
    

提交回复
热议问题