ruby iterators
DESCRIPTION
A 15 minute tutorial on Ruby iterators like each(), reduce() and map()TRANSCRIPT
RUBY ITERATORSIN 15 MINUTES OR LESS
WHAT YOU’LL NEED FROM PREVIOUS LESSONS
BLOCKS
ARRAYS AND HASHES
RAISE YOUR HAND IF YOU DON’T FEEL COMFORTABLE WITH ALL OF THESE...
THE COMMON ITERATORS
.TIMES()
.EACH()
.COLLECT(), .MAP(), .MAP!()
.REDUCE(), .INJECT()
WHAT YOU’LL ITERATE OVER
ARRAYS
HASHES
ANYTHING THAT IMPLEMENTS “ENUMERABLE”
THE SIMPLEST POSSIBLE EXAMPLE
5.times { puts “hello”}
THE SIMPLEST POSSIBLE EXAMPLE
5.times { puts “hello”}
AN ITERATOR
THE SIMPLEST POSSIBLE EXAMPLE
5.times { puts “hello”}
A BLOCK
AN ITERATOR
A MORE USEFUL EXAMPLE
GIVEN:some_data = [ {name: ”tim c”}, {name: “larry”}, {name: “lindsey”}, {name: “curly”}, {name: “moe”}]
THEN:
PRINT EVERYONE’S NAME ON THE SCREEN
THE SOLUTION (EACH)
some_data.each do |i| puts i[:name] end
WHY?
ITS EASIER TO READ (ONCE YOU’RE USED TO IT)
YOU’LL MAKE FEWER DUMB MISTAKES
THE NON-ITERATOR WAY
num = some_data.length - 1for i in 0..num do puts some_data[i][:name]end
YOU DECIDE
num = some_data.length - 1for i in 0..num do puts some_data[i][:name]end
some_data.each do |i| puts i[:name] end
VS.
NEXT PROBLEM
GIVEN:some_data = [ {name: ”tim c”}, {name: “larry”}, {name: “lindsey”}, {name: “curly”}, {name: “moe”}]
THEN:
GATHER AN ARRAY OF JUST THE NAMES
THE SOLUTION (MAP)
names = some_data.map do |i| i[:name] end
ALSO PERFECTLY GOOD (COLLECT)
names = some_data.collect do |i| i[:name] end
LAST, CALCULATE SOMETHING
GIVEN:some_data = [ {name: ”tim c”}, {name: “larry”}, {name: “lindsey”}, {name: “curly”}, {name: “moe”}]
THEN:
COUNT HOW MANY NAMES START WITH “L”
THE SOLUTION (REDUCE)
count = some_data.reduce(0) do |so_far, i| if i[:name].start_with?(“l”) so_far = so_far + 1 end so_farend
PULLING BACK THE CURTAIN
THIS IS LITERALLY ALL THE CODE IN THE RUBY .EACH() ITERATOR
def each for 0..self.length - 1 do yield self[i] endend
...THERE ARE MORE. BUT YOU’LL HARDLY EVER USE THEM.
STEP, DOWNTO, UPTO
FIND, FIND_ALL, SELECT, CYCLE
EACH_SLICE
CHUNK, REJECT
EACH_WITH_INDEX
NEARLY EVERYTHING IN ENUMERABLE: HTTP://WWW.RUBY-DOC.ORG/CORE-2.1.1/ENUMERABLE.HTML
SOME REVIEW
WHICH ITERATOR WOULD YOU USE TO....
CALCULATE THE AVERAGE CHARACTER COUNT IN AN ARRAY OF STRINGS
SOME REVIEW
WHICH ITERATOR WOULD YOU USE TO....
SEND AN EMAIL FOR EACH ADDRESS IN AN ARRAY OF ADDRESSES
SOME REVIEW
WHICH ITERATOR WOULD YOU USE TO....
SPLIT AN ARRAY OF FULL NAMES (IE. “TIM CULL”) INTO AN ARRAY OF FIRST NAME/LAST NAME TUPLES (IE. [“TIM”,”CULL”])
EXERCISE
NOW, LET’S ACTUALLY DO THAT LAST ONE
SPLIT AN ARRAY OF FULL NAMES (IE. “TIM CULL”) INTO AN ARRAY OF FIRST NAME/LAST NAME TUPLES (IE. [“TIM”,”CULL”])