我经常想对数组执行X次操作,然后返回除该数字之外的结果。我经常写的代码如下:
def other_participants
output =[]
NUMBER_COMPARED.times do
output << Participant.new(all_friends.shuffle.pop, self)
end
output
end
有更简洁的方法吗?
答案 0 :(得分:22)
听起来你可以使用map / collect(它们是Enumerable的同义词)。它返回一个数组,其内容是每次迭代通过map / collect返回。
def other_participants
NUMBER_COMPARED.times.collect do
Participant.new(all_friends.shuffle.pop, self)
end
end
您不需要另一个变量或显式返回语句。
http://www.ruby-doc.org/core/Enumerable.html#method-i-collect
答案 1 :(得分:6)
您可以使用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
来自fine manual:
each_with_object(obj){|(* args),memo_obj | ......}→obj
each_with_object(obj)→an_enumerator使用给定的任意对象迭代每个元素的给定块,并返回最初给定的对象 如果没有给出块,则返回枚举器。
答案 2 :(得分:1)
我这样的事情是最好的
def other_participants
Array.new(NUMBER_COMPARED) { Participant.new(all_friends.shuffle.pop, self) }
end