我所拥有的是用于生成随机十六进制值的方法。 E.g 666
或FF7
然而,我认为它看起来并不简单/优雅。我想要的是让它变得更简单这也许会让我的代码更短,但我不会知识。这就是为什么我需要提示或提示
到目前为止,这是我的代码:
def random_values
random_values = Array.new
letters = ['A','B','C','D','E','F']
for i in 1..15
if i <= 9
random_values << i
else
random_values << letters[i-10]
end
end
return random_values.shuffle[0].to_s + random_values.shuffle[0].to_s + random_values.shuffle[0].to_s
end
正如您可能看到的,我不会生成随机数。我只是将包含我想要的值的数组洗牌,这意味着数组中的所有数字都是唯一的,这是不需要的,但在编写代码时对我来说是最简单的解决方案。
我最关心的是返回行 ..如果只能编写如下:
return 3.times { random_values.shuffle[0] }
或
return random_values.shuffle[0].to_s *3
提前致谢!
答案 0 :(得分:5)
def random_value
r = Random.new
((r.rand * 16)).to_i.to_s(16)
end
puts random_value + random_value + random_value
或者,经过一些快速研究后:
"%06x" % (rand * 0xffffff)
来自Ruby, Generate a random hex color
此外,您本身不应该寻找更多高效的解决方案。您似乎在寻找更优雅,简单和直观的东西。 (顺便提一下,我的解决方案都不是。搜索过的是。)
答案 1 :(得分:3)
# For Ruby 1.9
require 'securerandom'
SecureRandom.hex(16)
# For Ruby 1.8 and above
require 'active_support/secure_random'
ActiveSupport::SecureRandom.hex(16)
答案 2 :(得分:1)
这样的东西?
(rand * MAX_VALUE).to_i.to_s(16)
其中MAX_VALUE是数字的上限。您还可以添加一些下限:
(MIN_VALUE + rand * (MAX_VALUE - MIN_VALUE)).to_i.to_s(16)
这将为您提供[MIN_VALUE,MAX_VALUE]
范围内的数字