Grabbing an integer out of an array

class List
  @contacts = []
  @id = 1000

  def self.add_contact(contact)
    contact.id = @id
    @contacts << contact
    @id += 1
  end

So I have an id that gets attached to the contact with each entry to the
array. Now i want to be able to locate a specific entry using the id's
as the identifier. I am new to ruby so any help is appreciated, thanks.

···

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

Austin S. wrote in post #1125813:

class List
  @contacts =
  @id = 1000

  def self.add_contact(contact)
    contact.id = @id
    @contacts << contact
    @id += 1
  end

So I have an id that gets attached to the contact with each entry to the
array. Now i want to be able to locate a specific entry using the id's
as the identifier. I am new to ruby so any help is appreciated, thanks.

The easiest way would be:

    def self.find_contact(contact_id)
      @contacts.find{|c| c.id == contact_id }
    end

The documentation for the `find' method is here

However that's a linear search over the array for each lookup. An
alternative might be something like this:

  class List
    @contacts = {} # Hash, not array
    @id = 1000

    def self.add_contact(contact)
      contact.id = @id
      @contacts[@id] = contact
      @id += 1
    end

    def self.find_contact(contact_id)
      @contacts[contact_id]
    end

Both of these mechanisms return `nil' if no such contact is found.

As a final question: why do you define the methods on `self'? The
combination of class methods and instance variables (@id, @contacts) is
a bit odd.

···

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