find_all help

K

kovax

Hello,

I have an array filled with employee objects that are defined like
this:

Employee = Struct.new:)name, :age)

I would like to use the find_all method on an array of employee objects
to find all employee objects with an age > 18. I tried the following
code but I was unsuccessful:

employees = []
employees.add Employee.new("joe" , 4)
employees.add Employee.new("sam" , 20)

employees.select { Employee.age > 18 }

Any help or pushes in the right direction would be really appreciated.
 
M

MonkeeSage

kovax said:
Hello,

I have an array filled with employee objects that are defined like
this:

Employee = Struct.new:)name, :age)

I would like to use the find_all method on an array of employee objects
to find all employee objects with an age > 18. I tried the following
code but I was unsuccessful:

employees = []
employees.add Employee.new("joe" , 4)
employees.add Employee.new("sam" , 20)

employees.select { Employee.age > 18 }

Any help or pushes in the right direction would be really appreciated.

Hi there,

In the block to select you don't want to use the Employee object, you
want to use the instances you created of it, which will be passed in
through the block argument. Also, I don't know if add is a custom
method you made, or mabye an alias for push or <<, or if you are asking
about that too, so in this code I use push:

Employee = Struct.new:)name, :age)
employees = []
employees.push Employee.new("joe" , 4)
employees.push Employee.new("sam" , 20)
adults = employees.select { |e| e.age > 18 }
adults.each { |e| puts "#{e.name}, #{e.age}" }
# => sam, 20

Regards,
Jordan
 
M

Morton Goldberg

Hello,

I have an array filled with employee objects that are defined like
this:

Employee = Struct.new:)name, :age)

I would like to use the find_all method on an array of employee
objects
to find all employee objects with an age > 18. I tried the following
code but I was unsuccessful:

employees = []
employees.add Employee.new("joe" , 4)
employees.add Employee.new("sam" , 20)

employees.select { Employee.age > 18 }

Any help or pushes in the right direction would be really appreciated.

I was tempted to answer that your code is illegal because employing
four-year olds is illegal :), but the real answer is Array doesn't
support 'add'. In Ruby you use 'push' or '<<'. Further, the form for
using 'select' is:

a_collection.select { |identifier| <code referring to identifier> }

where 'identifier' gets bound successively to elements of
'a_collection'. So try something like:

<code>
#! /usr/bin/ruby -w

Employee = Struct.new:)name, :age)

employees = []
employees << Employee.new("joe" , 4)
employees << Employee.new("sam" , 20)

p employees.select {|e| e.age > 18 }
</code>

<result>
[#<struct Employee name="sam", age=20>]
</result>

Regards, Morton
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,212
Messages
2,571,101
Members
47,695
Latest member
KayleneBee

Latest Threads

Top