Demo code will use the person class from yesterday
class Person
attr_reader :name, :job_title, :phone, :salary
@employee_number = 0
def initialize(name, job_title, phone, salary)
@name = name
@job_title = job_title
@phone = phone
@salary = salary.to_i
@number = Person.increase_number
end
def self.increase_number
@employee_number += 1
end
def description
"##{@number} #{@name} is a #{@job_title} and has salary #{@salary}"
end
end
people = [Person.new('Kerry MacFarlane', 'developer', '555-1234', '60000'),
Person.new('Terry Grayson', 'manager', '555-3456', '90000'),
Person.new('Sam Ferguson', 'developer', '555-4321', '65000'),
Person.new('Jossef Goldberg', 'designer', '555-2222', '65000'),
Person.new('Doris Hartwig', 'engineer', '555-6767', '75000'),
Person.new('Steven Selikoff', 'developer', '555-2424', '65000'),
Person.new('Zheng Mu', 'developer', '555-5885', '65000'),
Person.new('Greg Komosinski', 'analyst', '555-9090', '55000')
]
array = Array.new(10) { rand(1...100) }
print array
puts
selected_numbers = array.select do |number|
number > 50
end
print selected_numbers
puts
Selecting objects based on instance variable values
selected_people = people.select do |person|
person.salary > 65_000
end
puts 'selected people'
selected_people.each { |p| puts p.description }
Sort example with numbers
array = Array.new(10) { rand(1...100) }
print array
puts
print array.sort
puts
Sort example with strings
array = ['4', '23', '45', '2', '19']
print array
puts
print array.sort
puts
Can resolve the string sort issue using a custom sort
array = ['4', '23', '45', '2', '19']
print array
puts
print array.sort { |x, y| x.to_i <=> y.to_i }
puts
Sorting objects
puts 'before sort'
people.each { |p| puts p.description }
sorted_people = people.sort { |x, y| x.name <=> y.name }
puts 'after sort'
sorted_people.each { |p| puts p.description }
- find first instance of
- returns one value
array = [23, 56, 22, 17, 85]
value = array.find do |item|
item > 23
end
puts "value found #{value}"
Can also be written as
value = [23, 56, 22, 17, 85].find { |item| item > 23 }
puts "value found #{value}"
Using the Person class from earlier
result = people.find do |person|
person.salary > 65000
end
puts result.description