Newbie Rubino domanda:Rubino: È una stringa in un elenco di valori
Attualmente sto scrivendo:
if mystring == "valueA" or mystring == "ValueB" or mystring == "ValueC"
c'è un modo più ordinato di fare questo?
Newbie Rubino domanda:Rubino: È una stringa in un elenco di valori
Attualmente sto scrivendo:
if mystring == "valueA" or mystring == "ValueB" or mystring == "ValueC"
c'è un modo più ordinato di fare questo?
Ci sono due modi:
RegEx:
if mystring =~ /^value(A|B|C)$/ # Use /\Avalue(A|B|C)\Z/ here instead
# do something # to escape new lines
end
O, più esplicitamente,
if ["valueA", "valueB", "valueC"].include?(mystring)
# do something
end
Speranza che aiuta!
Come 'bout
if %w(valueA valueB valueC).include?(mystring)
# do something
end
Presumendo che ci si vuole estendere questa funzionalità con altri gruppi di corrispondenza, si potrebbe anche usare caso:
case mystring
when "valueA", "valueB", "valueC" then
#do_something
when "value1", "value2", "value3" then
#do_something else
else
#do_a_third_thing
end
In Ruby, si dovrebbe davvero raggiungere per ancoraggi \ A e \ Z a meno che non si sia sicuri che la stringa contenga zero ritorni a capo. –
@glennjackman, sarebbe invece '/ \ Avalue (A | B | C) \ Z /'? – jerhinesmith
sì, davvero. Sfortunatamente compromette la leggibilità. –