Array of a class' attribute

Hi there,

I'm working on a DB that has the rows structured as a ruby class called
Result, structured as follows:

class Result
   attr_accessor :name, :link, :messages
end

very simple one.

The catch is that there are a lot of doubles in terms of LINK attribute.
I'm trying to create a method that erases all the Result(s) that shares
the same :link attribute with another Result.

def erase_doubles

  @results.each do |result|

    #I REALLY DON'T HAVE IDEA ABOUT HOW TO BUILD IT :slight_smile:

  end

end

···

--
Posted via http://www.ruby-forum.com/.

So you need to write two methods:

1) one that accesses the DB to remove a specified row, and
2) one that identifies which rows to remove.

    For #2 you need to define which duplicate you want to keep:
    first? last? based on some other criteria?

This might be a good time to start writing tests :slight_smile:

HTH,

···

On Mon, Dec 10, 2012 at 7:49 AM, Leo M. <lists@ruby-forum.com> wrote:

I'm working on a DB that has the rows structured as a ruby class called
Result, structured as follows:

class Result
   attr_accessor :name, :link, :messages
end

The catch is that there are a lot of doubles in terms of LINK attribute.
I'm trying to create a method that erases all the Result(s) that shares
the same :link attribute with another Result.

--
Hassan Schroeder ------------------------ hassan.schroeder@gmail.com

twitter: @hassan

Leo M. wrote in post #1088536:

def erase_doubles

  @results.each do |result|

    #I REALLY DON'T HAVE IDEA ABOUT HOW TO BUILD IT :slight_smile:

  end

class Result
   attr_accessor :name, :link, :messages

   def initialize(name, link, msg)
     @name = name
     @link = link
     @msg = msg
   end
end

links = ['a', 'b', 'a', 'c', 'c']
names = ["Joe", "Bob", "Cathy", "Doug", "Carol"]
messages = ["mars", "venus", "jupiter", "mercury", "earth"]

links_enum = links.each
names_enum = names.each
msg_enum = messages.each

results = names.map do |link|
  Result.new(names_enum.next, links_enum.next, msg_enum.next)
end

p results

--output:--
[#<Result:0x00000101093290 @name="Joe", @link="a", @msg="mars">,
#<Result:0x000001010931f0 @name="Bob", @link="b", @msg="venus">,
#<Result:0x00000101093150 @name="Cathy", @link="a", @msg="jupiter">,
#<Result:0x000001010930b0 @name="Doug", @link="c", @msg="mercury">,
#<Result:0x00000101093010 @name="Carol", @link="c", @msg="earth">]

hash = Hash.new { |h, k| h[k] = }

results.each do |r|
  hash[r.link] = r
end

p hash.values

--output:--
[#<Result:0x00000101093150 @name="Cathy", @link="a", @msg="jupiter">,
#<Result:0x000001010931f0 @name="Bob", @link="b", @msg="venus">,
#<Result:0x00000101093010 @name="Carol", @link="c", @msg="earth">]

···

--
Posted via http://www.ruby-forum.com/\.

Hash values! Of course!

Thank you very much :slight_smile:

···

--
Posted via http://www.ruby-forum.com/.