Enumerable#inject
--Méthode pour effectuer l'opération de convolutionRéférence: https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/inject.html
module
. Un mix-in pour répéter les cours. Voici des amis célèbres (méthodes d'instance).
map
find
select
Référence: https://docs.ruby-lang.org/ja/latest/class/Enumerable.html
Dans Ruby, grâce au module ʻEnumerable`, vous pouvez utiliser des méthodes avec un traitement itératif pratique.
ary = [1,2,3,4,5]
ary.inject(1){ |sum, n| sum + n }
# => 16
,,,Difficile à comprendre.
Rendons les choses faciles à comprendre.
ary = [1,2,3,4,5]
ary.inject(1) do |sum, n|
puts sum
sum + n
end
=begin
=>1 (valeur initiale spécifiée dans l'argument de inject"1"Entre la somme)
=>2 (valeur initiale (somme)+Somme du premier élément (n) du tableau)
=>4 (La valeur de retour (2) du processus précédent est en somme+Somme du deuxième élément)
=>7 (omis ci-dessous)
=>11
=>16 (valeur de retour globale)
=end
Pouvez-vous l'imaginer en quelque sorte? C'est ** pliage **.
En passant, si l'argument de méthode (partie hoge
de ʻinject (hoge)`) est omis, le premier élément du tableau est mis à la valeur initiale.
ary = [1,2,3,4,5]
ary.inject do |sum, n|
puts sum
sum + n
end
=begin
=>1
=>3
=>6
=>10
=>15 (valeur de retour globale)
=end
Avec une bonne compréhension, vous pouvez rédiger des processus complexes d'une manière facile à comprendre. Puisque le traitement à l'intérieur du bloc peut être répété par convolution, il peut être écrit plus court que la méthode ʻeach`.
En d'autres termes, il est souvent utilisé pour la refactorisation itérative.
Écrivons un code pratique ci-dessous.
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
Une ligne a diminué. Rafraîchissant.
Recommended Posts