Sunday, 12 February 2017

How to generate a random string in Ruby



I'm currently generating an 8-character pseudo-random uppercase string for "A" .. "Z":



value = ""; 8.times{value  << (65 + rand(25)).chr}



but it doesn't look clean, and it can't be passed as an argument since it isn't a single statement. To get a mixed-case string "a" .. "z" plus "A" .. "Z", I changed it to:



value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}


but it looks like trash.



Does anyone have a better method?


Answer




(0...8).map { (65 + rand(26)).chr }.join


I spend too much time golfing.



(0...50).map { ('a'..'z').to_a[rand(26)] }.join


And a last one that's even more confusing, but more flexible and wastes fewer cycles:




o = [('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
string = (0...50).map { o[rand(o.length)] }.join

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...