Enumerable#inject
Referenz: https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/inject.html
Modul
. Ein Mix-In für sich wiederholende Klassen. Die folgenden sind berühmte Freunde (Instanzmethoden).
map
find
select
Referenz: https://docs.ruby-lang.org/ja/latest/class/Enumerable.html
In Ruby können Sie mit dem Modul "Aufzählbar" bequeme iterative Methoden verwenden.
ary = [1,2,3,4,5]
ary.inject(1){ |sum, n| sum + n }
# => 16
,,,Schwer zu verstehen.
Machen wir es uns leicht verständlich.
ary = [1,2,3,4,5]
ary.inject(1) do |sum, n|
puts sum
sum + n
end
=begin
=>1 (Anfangswert im Argument von inj angegeben"1"Gibt die Summe ein)
=>2 (Anfangswert (Summe)+Summe des ersten Elements (n) des Arrays)
=>4 (Der Rückgabewert (2) des vorherigen Prozesses ist in Summe+Zweite Elementsumme)
=>7 (unten weggelassen)
=>11
=>16 (Gesamtrückgabewert)
=end
Kannst du es dir irgendwie vorstellen? Dies ist ** Falten **.
Übrigens, wenn das Methodenargument (hoge
Teil von injizieren (hoge)
) weggelassen wird, wird das erste Element des Arrays auf den Anfangswert gesetzt.
ary = [1,2,3,4,5]
ary.inject do |sum, n|
puts sum
sum + n
end
=begin
=>1
=>3
=>6
=>10
=>15 (Gesamtrückgabewert)
=end
Mit einem richtigen Verständnis können Sie komplexe Prozesse auf leicht verständliche Weise schreiben. Da die Verarbeitung innerhalb des Blocks durch Faltung wiederholt werden kann, kann sie kürzer als die "jeder" -Methode geschrieben werden.
Mit anderen Worten, es wird häufig für iteratives Refactoring verwendet.
Lassen Sie uns unten einen praktischen Code schreiben.
sum = 0
ary = [100,200,300,42,52]
ary.each { |n| sum += n }
puts sum
# =>694
ary = [100,200,300,42,52]
sum = ary.inject { |s, n| s += n }
puts sum
# =>694
Eine Zeile hat abgenommen. Erfrischend.
Recommended Posts