2016-06-01 11 views
0

Ich habe ein Array, das sowohl String und Symbol enthältWie mit einem String in Ruby

In meiner Funktion ein Symbol übereinstimmen ich eine Zeichenfolge bin immer zu prüfen, ob das Array, das enthält oder nicht.

array = ["day",:night] 

def check(name) 
    if array.include? name or array.include? name.to_sym 
     return true 
    else 
     return false 
    end 
end 

Wenn die Eingabe "Tag" es gibt true. Wenn die Eingabe "Nacht" ist, wird false zurückgegeben. Ich möchte true im Falle von "Nacht" zurückgeben, als ich dies umwandelte, um zu überprüfen, ob ein Symbol mit dem gleichen Namen existiert.

Wie kann ich diese Funktion so einrichten, dass sie ein Symbol (:night) mit einem String ("night") vergleicht und true zurückgibt?

+0

Vielleicht möchten Sie 'array.map (&: to_s) .INCLUDE (name.to_s)'?. –

+0

Yup es hat funktioniert. Vielen Dank – bubai93

+0

Zögern Sie nicht, die von Cary beantwortete Frage zu markieren. – floum

Antwort

1

Setzen Sie Ihre Array in Ihre Methodendefinition wie folgt:

def check(name) 
    array = ["day",:night] 
    array.include? name.to_s or array.include? name.to_sym 
end 

p check("day") #=> true 
p check(:day) #=> true 
p check("night") #=> true 
p check("hyperspace") #=> false 
+1

Sie müssen keine if-Anweisung haben. Gib einfach das Ergebnis des Checks zurück. –

5
def check(name, array) 
    array.map(&:to_s).include?(name.to_s) 
end 

array = ["day",:night] 

check("day", array) #=> true 
check(:day, array) #=> true 
check("night", array) #=> true 
check(:night, array) #=> true 
check("cat", array) #=> false