2010-12-27 5 views
1

私が持っているのは、ランダムな16進値を生成する方法です。例えば666またはFF7Rubyで最短のrndヘックスを書く方法

しかし、私はそれは、単純な/エレガント全く見えないと思います...私が欲しいのはそれかもしれないだけでなく、私のコードを短くするが、私にはないだろうよりシンプルにすることですノーハウ。それは私がヒントを必要とする理由であるか、ここで

のヒントは、これまでの私のコードです:

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

をお使いの最後のコメントについて、あなたは(1..3ような何かを行うことができます) .map {some_code} – aromero

答えて

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

からまた、あなたは、それ自体が、より効率的な解決策を探しているべきではありません。よりエレガントでシンプルで直感的なものを探しているようです。 (私の解決策は、これらのどれもですが、検索されたものはありません。)

+0

これははるかにセクシーです!ありがとう!そしてあなたはおそらく正しいでしょう、私が探していたより単純な解決策でした。 – whirlwin

+1

セクシーな...私はそれがエレガンスの素晴らしい代名詞だと思う。私はそれがShortest Pathアルゴリズムを発見したときにDijkstraがぼやけた最初のものだったと確信しています。 – Mike

+1

'rand'は整数値をとるので、コマンドを少し単純にすることができます: ''%06x '%rand(0xffffff)'。 –

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)

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)