2011-10-05 2 views
12

多くの場合、配列に対してX回アクションを実行し、その番号以外の結果を返したいと思っています。私が通常書いているコードは次のとおりです:RubyでXxから配列を返すためのきれいな方法

def other_participants 
    output =[] 
    NUMBER_COMPARED.times do 
     output << Participant.new(all_friends.shuffle.pop, self) 
    end 
    output 
    end 

これを行うにはもっと清潔な方法がありますか?

+0

最高ですが、私は本当にあなたが間違った答えを受け入れたと思います。収集は本当に正確に正しいものです。あなたがもう1つの答えを受け入れるとしても、私は本当にあなたが地図を受け入れるべきだと思っています。 – xaxxon

+0

私は同じことを実験した後に自分で考えたので、私は切り替えました –

答えて

19

map/collect(これらはEnumerableの同義語です)のように聞こえます。 map/collectを介して各繰り返しが返されるコンテンツを持つ配列を返します。

def other_participants 
    NUMBER_COMPARED.times.collect do 
    Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

別の変数または明示的なreturn文は必要ありません。このような

http://www.ruby-doc.org/core/Enumerable.html#method-i-collect

6

あなたはeach_with_objectを使用することができます。fine manualから

def other_participants 
    NUMBER_COMPARED.times.each_with_object([]) do |i, output| 
    output << Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

each_with_object(OBJ){|(*引数)、memo_obj | ...}→OBJ
an_enumerator

反復処理→each_with_object(OBJ)指定された任意のオブジェクトと各要素の所与のブロック、及び最初に指定されたオブジェクトを返します。
ブロックが指定されていない場合は、列挙子を返します。

+2

命令的プログラマー!シリコン地獄の腐った! –

+2

@Andrew:私の芝生の子供から降りてください! –

0

Iの事何かが私はこれが評判のためではない誓う

def other_participants 
    Array.new(NUMBER_COMPARED) { Participant.new(all_friends.shuffle.pop, self) } 
end 
関連する問題