→ Use inject! Change three lines of code into one! Use inject! Stop repeating yourself! → → →
Which three lines you keep repeating all over again? Initializing variable? Iterating over collection and inserting into that variable? Returning that variable? Do it in one line!
numbers_asc = [1,2,3,4,5,6]
squares_desc = numbers_asc.reverse.inject([]) {|aggr,v| aggr << v**2}
#the line above instead of three lines below!
#squares_desc = []
#numbers_asc.reverse.each {|n| squares_desc << n**2}
#squares_desc #this third line is used to return value (typically from method)
p squares_desc
Output, as it's easy to guess is:
[36, 25, 16, 9, 4, 1]
It works! Use it!
Created on 13 May 2009