我正在寻找一种生成邀请码的方法。我希望代码看起来不像乱码文本:JakSj12
但更像是heroku,使用带有3个数字的有趣单词。
lightspeed131 or happy124, jetski99
如何构建一个采用单词列表的方法,可能是100?并随机分配3个数字?
由于
答案 0 :(得分:3)
这里给出的其他答案有点慢,因为他们在每次通话时都会洗牌。这有点快一点:
def wordwithnumber(words)
words[rand(words.length)]+(rand(900)+100).to_s()
end
wordwithnumber(["lightspeed", "happy", "jetski"])
这样每次都会给你三位数,如果你想要一个从0到999的数字,可以相应地修改rand()调用。
答案 1 :(得分:2)
def random_name(words, number = nil)
number ||= rand(999)
words.sample.to_s + number.to_s # concatenate a random word and the number
end
# example:
random_name(["lightspeed", "happy"]) # lightspeedXXX, happyXXX (where XXX is a random number)
random_name(["lightspeed", "happy"], 5) # lightspeed5, happy5
答案 2 :(得分:2)
总是3个不同的数字?不是很有效但很简单:
words.zip((100..999).to_a.shuffle).map(&:join)
如果你不介意重复数字(我猜不是):
words.map { |word| word + 3.times.map { rand(10) }.join }
或者只是在Ruby 1.9中:
words.map { |word| word + Random.new.rand(100..999).to_s }
([edit]这会生成100个带数字的单词,这是我所理解的。)
答案 3 :(得分:1)
我会使用以下(非常易读的恕我直言)解决方案:
names = %w[tinky\ winky dipsy laa-laa po]
def random_name(names)
[names, (100..999).to_a].collect(&:sample).join
end
3.times.collect { random_name(names) }
# => ["dipsy147", "dipsy990", "po756"]
更友好的解决方案:
def random_name(names)
@numbers ||= (100..999).to_a
[names, @numbers].collect(&:sample).join
end
答案 4 :(得分:1)
def random_word_and_number( words, max=999 )
"%s%0#{max.to_s.length}d" % [ words.sample, rand(max+1) ]
end
(1..4).map{ random_word_and_number( %w[ foo bar jim jam ] ) }
#=> ["jim048", "bar567", "jim252", "foo397"]
让我们指定任意最大值,同时确保所有答案都具有相同的位数。