Comment annuler l'itération d'un tableau avec les éléments next et before de l'élément en cours?Ruby Array - reverse reverse avec l'élément next and before
Est-il possible d'utiliser each_cons
avec reverse_each
?
Comment annuler l'itération d'un tableau avec les éléments next et before de l'élément en cours?Ruby Array - reverse reverse avec l'élément next and before
Est-il possible d'utiliser each_cons
avec reverse_each
?
Oui, c'est possible.
[1,2,3,4,5,6].reverse_each.each_cons(3) { |before, current, next_|
p [before, current, next_]
}
imprime
[6, 5, 4]
[5, 4, 3]
[4, 3, 2]
[3, 2, 1]
([nil]+[1,2,3,4,5,6]+[nil]).reverse_each.each_cons(3) { |before, current, next_|
p [before, current, next_]
}
impressions
[nil, 6, 5]
[6, 5, 4]
[5, 4, 3]
[4, 3, 2]
[3, 2, 1]
[2, 1, nil]
Cela pourrait fonctionner pour vous:
class Array
alias :old_each :each
def each
reverse.old_each {|e| yield e}
end
end
a = [1,2,3]
a.each {|e| print "#{e} "} # => 3 2 1
Notez que vous devez faire attention car Array, pour des raisons d'efficacité, surcharge certaines méthodes Enumerable sans utiliser each
.
J'ai utilisé ce dans un grand projet avec mon employeur précédent, en ajoutant juste avant mon départ. Boy, étais-je heureux de sortir de là.
Edit: Il me est apparu juste que je aurais pu améliorer cela dans le projet cité ci-dessus:
def each
if rand(1000) == 500
reverse.old_each {|e| yield e}
else
old_each {|e| yield e}
end
end
bonne explication .. –
j'ai eu un mot avec @Arup. Il connaît maintenant le terme «bombe à code». –