注入メソッド:説明
今日は、rubyのinjectメソッド(#inject)を見ています。 コーディングについての詳細を学ぶために彼らの旅に沿って十分に沿っている人として、あなたは言語が混乱し、素晴らしい方法や機能で満たされて 最近、私はこれらの混乱の1つに出くわしました、そして私が学んだように、素晴らしい方法、inject。 私は整数の配列を合計しようとしていて、rubyにはネイティブの#sumメソッドがあると誤って思っていましたが、そのような運はありませんでした。 だから、私はグーグルに行き、#injectを見つけました。
#injectメソッドは#reduceメソッドと同じように動作し、エイリアスと見なされます。 これらの列挙子メソッドは、数値の範囲または配列を取ることができ、オプションでブロックを受け取ることができます。 呼び出されると、injectメソッドは各要素を渡し、それぞれを順番に累積します。これをさらに分解するために、injectはコレクションの最初の要素を取得し、それをベースの’sum’として使用します。 次に、次の要素(または配列内の2番目の要素)を取得し、それらを一緒に追加します。 このメソッドは、その結果を’sum’に割り当て、すべての要素がブロックを通過するまでコレクション内の次の要素を追加します。 この場合、’sum’はアキュムレータと呼ばれるものです—値を累積しているためです。 戻り値は、コレクション内のすべての要素の合計になります。
このメソッドは、アキュムレータのデフォルト値を渡すこともできるため、興味があります。 以下を参照してください:
.inject(0, :+) => 32.inject(0) {|sum, number| sum + number} => 19
ここでは、メソッドにアキュムレータの開始値を与えています。div>
今、私たちは値を追加する方法を知っているコレクションから…#injectの他のアプリケーションを見てみましょう。ハッシュを構築する:
#Injectは、値を一緒に追加する以外では非常に強力です。 キーと値(つまり、])を含む配列の配列であるデータまたは戻り値があるとしましょう。 あなたはそれらをハッシュ内のキー:値のペアにしたいと思うでしょう。 注入は非常に迅速かつエレガントにあなたがそれを成し遂げるのを助けることができます。
, ].inject({}) do |result, element|
result = element.last
result
end
#=> {:student=>"Terrance Koar", :course=>"Web Dev"}
この例では、キーと値のペアを含む配列の配列から始めます。 Injectを呼び出して空のハッシュの引数を渡すと、アキュムレータ(またはこの場合は’result’)として機能します。 次に、メソッドは各要素を反復処理し、提供されたブロックを使用してハッシュに注入します。 ブロックは、最初に来るkey要素を新しいハッシュのキーとして割り当て、ネストされた配列の2番目の要素に等しい値を設定しています。 ここで注意すべきもう一つのことは、injectの戻り値が次の結果(通常は整数の合計)であることです。 ハッシュが必要なので、’result’ハッシュを明示的に返す必要があります。さらに、injectは、新しいハッシュを構築している間でさえ、他のいくつかのクールなメソッドの助けを借りてデータ型を変換するために使用できます!P>
, ].inject({}) do |result, element|
result = element.last.upcase
result
end
# => {"student"=>"TERRANCE KOAR", "course"=>"WEB DEV"}OR, ].inject({}) do |result, element|
result = element.last.split
result
end# => {"student"=>, "course"=>}
Injectはそこで停止しません。 また、フィルタリングし、新しい配列を構築することができます!/div>
.inject() do |result, element|
result << element.to_s if element > 9
result
end# =>
ここでは、空の配列の初期値を注入渡しています。 ||の間の最初の要素は、常にブロック内の’result’またはアキュムレータになります。 したがって、resultが空の配列に等しく設定されると、要素が9より大きい場合、この場合、フィルタを渡す任意の要素をシャベルできます。 繰り返しになりますが、injectの戻り値は次の結果であるため、明示的に結果を返す必要があります。