[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

find_all help

kovax

9/12/2006 4:18:00 AM

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.

2 Answers

MonkeeSage

9/12/2006 4:32:00 AM

0

kovax wrote:
> 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

Morton Goldberg

9/12/2006 4:59:00 AM

0

On Sep 12, 2006, at 12:20 AM, kovax wrote:

> 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