Clean way to return an array from X.times in Ruby
I thing something like this is best
def other_participants
shuffled_friends = all_friends.shuffle
Array.new(NUMBER_COMPARED) { Participant.new(shuffled_friends.pop, self) }
end
You could use each_with_object
:
def other_participants
NUMBER_COMPARED.times.each_with_object([]) do |i, output|
output << Participant.new(all_friends.shuffle.pop, self)
end
end
From the fine manual:
each_with_object(obj) {|(*args), memo_obj| ... } → obj
each_with_object(obj) → an_enumeratorIterates the given block for each element with an arbitrary object given, and returns the initially given object.
If no block is given, returns an enumerator.
sounds like you could use map/collect (they are synonyms on Enumerable). it returns an array with the contents being the return of each iteration through the map/collect.
def other_participants
NUMBER_COMPARED.times.collect do
Participant.new(all_friends.shuffle.pop, self)
end
end
You don't need another variable or an explicit return statement.
http://www.ruby-doc.org/core/Enumerable.html#method-i-collect