当前位置:  开发笔记 > 编程语言 > 正文

如何在ruby中生成随机的10位数字?

如何解决《如何在ruby中生成随机的10位数字?》经验,为你挑选了7个好方法。

另外,我如何将其格式化为用零填充的字符串?



1> quackingduck..:

要生成数字调用rand,结果为"10到10的幂"

rand(10 ** 10)

要用零填充数字,可以使用字符串格式运算符

'%010d' % rand(10 ** 10)

或者rjust字符串的方法

rand(10 ** 10).to_s.rjust(10,'0')  



2> Kreeki..:

我想提供一个我认识的最简单的解决方案,这是一个非常好的技巧.

rand.to_s[2..11] 
 => "5950281724"


值得注意的是,它只会给你最多16位数字.
不保证返回确切的长度
唯一的问题是它给你一个字符串,所以如果你真的需要一个数字,那么你必须再次施放它 - 这有点乱.

3> steenslag..:

这是生成10大小数字字符串的快速方法:

10.times.map{rand(10)}.join # => "3401487670"



4> art-solopov..:

最简单的答案可能是

rand(1e9...1e10).to_i

to_i部分是必要的,因为1e91e10实际上是浮动:

irb(main)> 1e9.class
=> Float



5> Kamil Lelone..:

不要使用 rand.to_s[2..11].to_i

为什么?因为这是你能得到的:

rand.to_s[2..9] #=> "04890612"

然后:

"04890612".to_i #=> 4890612

注意:

4890612.to_s.length #=> 7

这不是你所期望的!

要在您自己的代码中检查该错误,而不是.to_i您可以像这样包装它:

Integer(rand.to_s[2..9])

很快就会发现:

ArgumentError: invalid value for Integer(): "02939053"

所以坚持下去总是更好.center,但请记住:

rand(9) 

有时可能会给你0.

为了防止:

rand(1..9)

这将永远返回1..9范围内的东西.

我很高兴我有很好的测试,我希望你能避免破坏你的系统.



6> Gabriel Osor..:

仅仅因为没有提到,该Kernel#sprintf方法(或它Kernel#format在Powerpack库中的别名)通常比该String#%方法更受欢迎,如Ruby社区风格指南中所述.

当然这是值得商榷的,但要提供见解:

@ quackingduck的答案的语法是

# considered bad
'%010d' % rand(10**10)

# considered good
sprintf('%010d', rand(10**10))

这种偏好的本质主要是由于它的神秘性质%.它本身并不是非常语义,没有任何额外的上下文,它可以与%模运算符混淆.

样式指南中的示例:

# bad
'%d %d' % [20, 10]
# => '20 10'

# good
sprintf('%d %d', 20, 10)
# => '20 10'

# good
sprintf('%{first} %{second}', first: 20, second: 10)
# => '20 10'

format('%d %d', 20, 10)
# => '20 10'

# good
format('%{first} %{second}', first: 20, second: 10)
# => '20 10'

为了正义String#%,我个人很喜欢使用运营商类似的语法,而不是命令,以同样的方式,你会做your_array << 'foo'your_array.push('123').

这恰恰说明了社区中的一种趋势,"最好的"取决于你.

此博客中的更多信息.



7> 907th..:

随机数生成

使用内核#rand方法:

rand(1_000_000_000..9_999_999_999) # => random 10-digits number

随机字符串生成

使用times+ map+ join组合:

10.times.map { rand(0..9) }.join # => random 10-digit string (may start with 0!)

使用填充进行字符串转换的数字

使用字符串#%方法:

"%010d" % 123348 # => "0000123348"

密码生成

使用KeePass密码生成器库,它支持生成随机密码的不同模式:

KeePass::Password.generate("d{10}") # => random 10-digit string (may start with 0!)

可以在此处找到KeePass模式的文档.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有