2010-01-14 3 views
11

ich Index in eine Hash benötigen, die ich in Bezug auf „wahr“ und „falsch“Wie man 1 und 0 in Ruby auf True und False setzt. Möchten Sie eine boolean oder logisch aus

colorHash = Hash.new { |hash, key| hash[key] = {} } 
colorHash["answers"][true] = "#00CC00" 
colorHash["answers"][false] = "#FFFFFF" 

Für Testzwecke definiert haben, ich mit rand bin Indizierung (2) und dass schlägt fehl. Wenn ich mit true indexiere, funktioniert es.

Ich war auf der Suche nach so etwas wie

rand (2) .logical

aber nichts finden.

Antwort

25

Es gibt einen einfachen (wenn auch nicht sehr aufregend) Weg, dies zu tun:

rand(2) == 1 
1

[true,false].shuffle oder [true,false].sort { rand }

def get_bool 
    [true,false].shuffle.shift 
end 
6

Wie sei es so etwas?

[true,false][rand(2)] 

Das heißt, ein zufälliges Ergebnis aus dem True/False-Array zurückgeben. Es ist sicherlich viel ausführlicher als rand(2) == 1, obwohl.

+3

Ich mag diese Idee! In Ruby 1.9 können Sie '[true, false] .sample' machen – Cimm

5

Ich denke, dies ist eine der coolsten Möglichkeiten, und #sample ist einer der weniger bekannten Array-Methoden:

[true, false] .sample

Edit: Dies ist nur gültig in Ruby> = 1.9

Verwandte Themen