Ruby编写rnd hex的最短路径

时间:2010-12-27 02:41:11

标签: ruby

我所拥有的是用于生成随机十六进制值的方法。 E.g 666FF7

然而,我认为它看起来并不简单/优雅。我想要的是让它变得更简单这也许会让我的代码更短,但我不会知识。这就是为什么我需要提示或提示

到目前为止,这是我的代码:

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

提前致谢!

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]

范围内的数字