Using and Querying Struct

I’m trying to use the Stuct class to store some data. In my case, a
bunch of data. But, in simplistic terms I’ve come up with the following
example of what I’m looking for.

class Mailinglist <
Struct.new(:f_name, :l_name, :city)
end

As an example, let’s say I have two people John S. and Jane Smith who
live in Smithville. Is there an easy way to query an array containing
Structs to determine of :l_name, and :city of with the array match and
only produce one item from the array?

I know you could sort the array so all the data is sorted on l_name and
then city. That would give you some order to the data:

#<Struct Mailinglist f_name=“Mike”, l_name=“Jones”, city=“Pineville”>
#<Struct Mailinglist f_name=“Jane”, l_name=“Smith”, city=“Smithville”>
#<Struct Mailinglist f_name=“John”, l_name=“Smith”, city=“Smithville”>
#<Struct Mailinglist f_name=“Sally”, l_name=“Taulton”, city=“Ashville”>

but would you have to iterate through the array to find all the matches
to city, then l_name? I wouldn’t think so, but I’m not sure how else to
do it at this point.

Wayne

Am 05.01.2013 13:40, schrieb Wayne B.:

I’m trying to use the Stuct class to store some data. In my case, a
bunch of data. But, in simplistic terms I’ve come up with the
following example of what I’m looking for.

class Mailinglist < Struct.new(:f_name, :l_name, :city) end

There is no need to subclass, just use

Mailinglist = Struct.new(:first_name, :last_name, :city)

(Btw, your class name is misleading, `ListMember’ would be
more accurate.)

As an example, let’s say I have two people John S. and Jane Smith
who live in Smithville. Is there an easy way to query an array
containing Structs to determine of :l_name, and :city of with the
array match and only produce one item from the array?

data = [
Mailinglist.new(‘Mike’, ‘Jones’, ‘Pineville’),
Mailinglist.new(‘Jane’, ‘Smith’, ‘Smithville’),
Mailinglist.new(‘John’, ‘Smith’, ‘Smithville’),
Mailinglist.new(‘Sally’, ‘Taulton’, ‘Ashville’)
]

matches = data.select {|member| member.city == ‘Smithville’ &&
member.last_name == ‘Smith’ }
matches.first

=> #<struct Mailinglist first_name=“Jane”, last_name=“Smith”,

city=“Smithville”>

Regards,
Marcus

Am 05.01.2013 15:16, schrieb [email protected]:

matches = data.select {|member| member.city == ‘Smithville’ &&
member.last_name == ‘Smith’ }
matches.first

=> #<struct Mailinglist first_name=“Jane”, last_name=“Smith”,

city=“Smithville”>

If you really need only the first match, you can use #find instead of
#select:

first_match = data.find {|member| member.city == ‘Smithville’ &&
member.last_name == ‘Smith’ }

Wow, thanks Marcus!

I think will work perfectly for my needs. I’ve got a situation where I
have register addresses that are identical, but are used differently,
but the list I retrieve requires me to do some additional checks to
determine what’s what. I struggled with how to deal with this, so I
looked at the Struct class to store things in an array, so I could pull
out the needed info, but then couldn’t quite wrap my head around how I
could query the entire array without iterating through it.

Thanks for the help!

Wayne

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs