2010-12-27 9 views
1

Was ich habe, ist eine Methode, um zufällige Hex-Werte zu generieren. 666 Eg oder FF7Rubin kürzester Weg zum Schreiben rnd hex

Aber ich glaube nicht, es überhaupt simple/elegant aussieht .. Was ich will, zu machen, ist es einfacher, die vielleicht meinen Code kürzer als gut machen, aber ich weiß nicht Fachwissen. Deshalb habe ich Tipps brauchen oder Hinweise

Hier ist mein Code so weit:

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 

Wie Sie wahrscheinlich sehen, ich erzeugen keine Zufallszahlen. Ich mische einfach das Array, das die gewünschten Werte enthält, was bedeutet, dass alle Zahlen im Array eindeutig sind, was nicht benötigt wird, aber es war die einfachste Lösung für mich, als ich den Code schrieb.

Ich bin sehr besorgt über die Rückleitung .. Wenn es nur möglich war, wie zu schreiben:

return 3.times { random_values.shuffle[0] } 

oder

return random_values.shuffle[0].to_s *3

Vielen Dank im Voraus!

+0

In Bezug auf Ihre letzte Bemerkung, man kann wie etwas tun (1..3) .map {some_code} – aromero

Antwort

5
def random_value 
    r = Random.new 
    ((r.rand * 16)).to_i.to_s(16) 
end 

puts random_value + random_value + random_value 

Oder nach ein paar schnelle Forschung:

"%06x" % (rand * 0xffffff) 

Von Ruby, Generate a random hex color

Außerdem sollten Sie nicht für eine effiziente Lösung suchen per se. Sie scheinen nach etwas eleganter, einfacher und intuitiver zu suchen. (Meine Lösung ist übrigens keines von diesen. Das Gesuchte ist.)

+0

Das ist viel sexier! Vielen Dank! Und Sie haben wahrscheinlich Recht, eine einfachere Lösung war, was ich suchte. – whirlwin

+1

Sexier ... Ich denke, das ist ein wunderbares Synonym für Eleganz. Ich bin sicher, es war das erste, was Dijkstra platzte, als er den Shortest Path-Algorithmus entdeckte. – Mike

+1

'rand' nimmt einen ganzzahligen Wert, wodurch der Befehl etwas einfacher wird:' '% 06x'% rand (0xffffff) '. –

1

So etwas ähnliches?

Dabei ist MAX_VALUE die obere Grenze für die Zahlen Sie können auch einige untere Grenze hinzu:

(MIN_VALUE + rand * (MAX_VALUE - MIN_VALUE)).to_i.to_s(16) 

Dies wird Ihnen Zahlen im Bereich [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) 
Verwandte Themen