Forum: Ruby on Rails Determine if part of a hash key exists

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0de83fd56f1af530034ba8efa5490b1b?d=identicon&s=25 John Butler (johnnybutler7)
on 2010-03-11 12:14
(Received via mailing list)
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
56b7e1808013614acdb73cbaaa6938a1?d=identicon&s=25 Michael Pavling (Guest)
on 2010-03-11 12:51
(Received via mailing list)
On 11 March 2010 11:13, johnnybutler7 <johnnybutler7@gmail.com> wrote:
> 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
(http://ruby-doc.org/core/classes/Enumerable.html) 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 ;-)
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/ }
0de83fd56f1af530034ba8efa5490b1b?d=identicon&s=25 John Butler (johnnybutler7)
on 2010-03-11 13:06
(Received via mailing list)
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
0d4fb515362ed99cad89b3876962131e?d=identicon&s=25 Pedro Fernandes Steimbruch (Guest)
on 2010-03-11 19:12
(Received via mailing list)
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>
This topic is locked and can not be replied to.