Ruby iterators

Post on 15-Jan-2015

115 views 0 download

Tags:

description

A 15 minute tutorial on Ruby iterators like each(), reduce() and map()

Transcript of Ruby iterators

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”])