Hi,
this is actually a Ruby question, but I hope I get an answer anyway.
I am looking for a “hash.each.where” function, but I can’t find
anything.
I have a hash that has a :status key. The value could be ‘new’ or
‘old’.
Now I want to get only the entries where status is ‘new’. I know how
to do this with an if-clause, but there has to be a better way.
What I want is something like this:
puts “New entries”
hash.each where :status => ‘new’ do |new|
puts new
end
puts “Old entries”
hash.each where :status => ‘old’ do |old|
puts old
end
I thought maybe the hash.select function could help me, but I only
found that example and I don’t know how to unse the constraints only
for the :status key and not all keys:
h = { “a” => 100, “b” => 200, “c” => 300 }
h.select {|k,v| k > “a”} #=> {“b” => 200, “c” => 300}
h.select {|k,v| v < 200} #=> {“a” => 100}
Thanks in advance
Sebastian
On 30 June 2011 13:27, Sebastian [email protected] wrote:
I have a hash that has a :status key. The value could be ‘new’ or
‘old’.
Now I want to get only the entries where status is ‘new’. I know how
to do this with an if-clause, but there has to be a better way.
Do you mean you have an array of hashes? Or a hash where each value is
an object/array?
Can you give an illustration of what your hash looks like, so it’s
possible to suggest some solutions.
Cheers,
Sorry,
yes I have an array of hashes:
hash = [{:name => “like”, :status => “old”}, {:name => “this”, :status
=> “new”}, {:name => “here”, :status => “old”}]
only_new_entries = array_of_hashes.select { |h| h[:status] == “new” }
~ jf
John F.
Principal Consultant, BitsBuilder
LI: http://www.linkedin.com/in/johnxf
SO: User John Feminella - Stack Overflow
Thank you,
that was exactly what I was looking for!!!
On 30 Jun., 15:16, Paulo Muggler M. [email protected]
Sebastian <sebastian.goldt@…> writes:
Thank you,
that was exactly what I was looking for!!!
Further to the solution provided, if the data is coming from a database,
then
you can create some scopes to filter the information for you. It might
be
faster than looping through the array.