Determine if part of a hash key exists

Hi,

I have a hash something like {:schools_name => ''test", :schools_address => "test, etc....}

What i need to know is does any of the keys contain the word "schools" in it.

So

hash.has_key? :schools_name will return true

But how can i get it to return true if part of any key contains the word "schools"

I can think of a couple of ways using a loop but surely there has to be a quick 1 line way?

JB

There's a few things you can do with enumerable methods (Module: Enumerable (Ruby 3.1.2)) depending on what you want to know from the match (just whether it's in there somewhere; exactly where it is; all the keys that match; etc)

Personally, I'd recommend looking at "select" and "detect" methods as a start, but here's a line using a loop (like you said :wink: Run this at the console to see all of the positions of the matches shown.

  hash.keys.each { |hash_key| puts hash_key.to_s =~ /schools/ }

But I *think* this is what you're after, but if not, hopefully it puts you on the right track:

  hash.keys.select { |hash_key| hash_key.to_s =~ /schools/ }

h.each_key.collect {|k| k if k.to_s.include?(‘school’) }

irb(main):007:0> h = {:school_name => ‘RoR School’, :school_address => ‘RoR Street’} => {:school_name=>“RoR School”, :school_address=>“RoR Street”}

irb(main):008:0> h.each_key.collect {|k| k if k.to_s.include?(‘school’) } => [:school_name, :school_address] irb(main):009:0>

Ye this is what i had come up with

hash.keys.collect {|k| k.to_s.include?('schools') }

like the regular expression better though,

cheers,

JB