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.

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.