user1113314
user1113314

Reputation: 839

How to access a random element in a dictionary in Swift

I got the following code:

var myDic = [String: Customer]()
let s1 = Customer("nameee", "email1")
let s2 = Customer("nameee2", "email2")
let s3 = Customer("nameee3", "email3")
myDic[s1.name] = s1
myDic[s2.name] = s2
myDic[s3.name] = s3

How can I select a random element from the dictionary? I think I should use arc4random_uniform but couldn't find any documentation on it.

Upvotes: 17

Views: 10700

Answers (3)

Ashfaqur_Rahman
Ashfaqur_Rahman

Reputation: 158

Swift 5+ (Xcode 12+) introduces randomise Dictionary key also

let randomVal = myDict.randomElement()?.key

Upvotes: 4

Cœur
Cœur

Reputation: 38667

Swift 4.2+ (Xcode 10+) introduces two simple possibilities.

Either randomElement:

let randomVal = myDict.values.randomElement()

Or randomElement:

let randomVal = myDict.randomElement().value

Upvotes: 9

Alex Wayne
Alex Wayne

Reputation: 187054

You have to cast some things around, but this seems to work.

var dict:[String:Int] = ["A":123, "B": 234, "C": 345]
let index: Int = Int(arc4random_uniform(UInt32(dict.count)))
let randomVal = Array(dict.values)[index] # 123 or 234 or 345

Basically, generate a random index value between zero and the total item count. Get the values of the dictionary as an array and then fetch the random index.

You could even wrap that in an extension for easy access.

Upvotes: 28

Related Questions