> import Foundation > > (1..<4).sample > [1,2,3].sample > "abc".characters.sample > ["a": 1, "b": 2, "c": 3].sample > > Like so many users of Swift, I have extensions of IntegerType, ClosedInterval > and CollectionType that avail me of the above methods and their family, but > I’d much rather if such extensions came with Darwin or at least Foundation.
I don't think a `sample` property or method is the right approach here. It would be using some sort of global source of random numbers, which means that: * It's not testable or repeatable * It needs to be synchronized with other threads * It can't be configured to use a different random number generator Personally, I would eventually like to see something like this in the standard library: protocol RandomizerProtocol { mutating func randomBytes(_ n: Int) -> [UInt8] // or possibly something involving a generic-length tuple, for speed } extension RandomizerProtocol { // for coin flips mutating func randomChoice() -> Bool { ... } // for choosing a random element mutating func randomChoice<CollectionType: RandomAccessCollection>(from collection: CollectionType) -> CollectionType.Element { ... } // for choosing a random value from an uncountable range (e.g. Range<Double>) mutating func randomChoice<Element: Strideable>(from range: Range<Element>) -> Element { ... } } struct Randomizer: RandomizerProtocol { init(state: [UInt8]) { ... } init() { self.init(state: somethingToMakeAGoodRandomState()) } mutating func randomBytes(_ n: Int) -> [UInt8] { // akin to arc4random() } } This would allow you to confine a random number generator to a particular thread, swap one implementation for another, or inject one with a fixed starting state as a dependency to make tests predictable. A design like this one works around the problems I described nicely. However, I don't think this is a high enough priority to address right now. This is borderline out-of-scope as "major new library functionality", and there's so much stuff to do that is truly core to the language, this simply seems like a distraction. -- Brent Royal-Gordon Architechies _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users