Как я вижу, линии лорема четны, так что вы можете отклонить их.
def last_name_from_file(file_name)
File.
readlines(file_name).
reject.
with_index(1) { |_, id| id.even? }.
map { |line| line.split(',').first }.
uniq
end
Хорошо, как мне получить имя?
Выможет сделать метод следующим образом:
def names(file_name)
File.
readlines(file_name).
reject.
with_index(1) { |_, id| id.even? }.
map { |line| line.split(' --').first.split(', ') }.
map { |ln, fn| { lastname: ln, firstname: fn } }
end
И теперь вы можете вызвать его:
names = names('example.txt')
names
# => [{:lastname=>"Kent", :firstname=>"Mackenna"}, {:lastname=>"Marven", :firstname=>"Gardens"}, {:lastname=>"McLaughlinn", :firstname=>"Matt"}, {:lastname=>"Lang", :firstname=>"August"}, {:lastname=>"Brad", :firstname=>"Nick"}, {:lastname=>"Adam", :firstname=>"Levine"}, {:lastname=>"Learner", :firstname=>"York"}, {:lastname=>"Ortiz", :firstname=>"Andrew"}, {:lastname=>"Lang", :firstname=>"Bryant"}]
names.map { |name| name[:lastname] }
# => ["Kent", "Marven", "McLaughlinn", "Lang", "Brad", "Adam", "Learner", "Ortiz", "Lang"]
names.map { |name| name[:firstname] }
# => ["Mackenna", "Gardens", "Matt", "August", "Nick", "Levine", "York", "Andrew", "Bryant"]