Mike Sutton
Mike Sutton

Reputation: 4211

Ruby: Is a string in a list of values

Newbie Ruby question:

I'm currently writing:

if mystring == "valueA" or mystring == "ValueB" or mystring == "ValueC"

is there a neater way of doing this?

Upvotes: 19

Views: 16391

Answers (3)

jerhinesmith
jerhinesmith

Reputation: 15492

There are two ways:

RegEx:

if mystring =~ /^value(A|B|C)$/ # Use /\Avalue(A|B|C)\Z/ here instead 
   # do something               # to escape new lines
end

Or, more explicitly,

if ['valueA', 'valueB', 'valueC'].include?(mystring)
   # do something
end

Hope that helps!

Upvotes: 50

Tim Snowhite
Tim Snowhite

Reputation: 3776

Presuming you'd want to extend this functionality with other match groups, you could also use case:

case mystring
when "valueA", "valueB", "valueC" then
 #do_something
when "value1", "value2", "value3" then
 #do_something else
else
 #do_a_third_thing
end

Upvotes: 1

oenli
oenli

Reputation: 700

How 'bout

if %w(valueA valueB valueC).include?(mystring)
  # do something
end

Upvotes: 7

Related Questions