You are on page 1of 8

11/21/2017 Learn Ruby the Hard Way - Read for Free

Exercise 32: Loops and Arrays

You should now be able to do some programs that are much more interesting. If
you have been keeping up, you should realize that now you can combine all the
other things you have learned with if-statements and boolean expressions to
make your programs do smart things.

However, programs also need to do repetitive things very quickly. We are going
to use a for-loop in this exercise to build and print various arrays. When you
do the exercise, you will start to figure out what they are. I won't tell you right
now. You have to figure it out.

Before you can use a for-loop , you need a way to store the results of loops
somewhere. The best way to do this is with arrays . Arrays are exactly what
their name says: a container of things that are organized in order from first to
last. It's not complicated; you just have to learn a new syntax. First, there's how
you make arrays :
https://learnrubythehardway.org/book/ex32.html 1/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

hairs = ['brown', 'blond', 'red']

eyes = ['brown', 'blue', 'green']

weights = [1, 2, 3, 4]

You start the array with the [ (le bracket) which "opens" the array . Then
you put each item you want in the array separated by commas, similar to
function arguments. Lastly, end the array with a ] (right bracket) to indicate
that it's over. Ruby then takes this array and all its contents and assigns them to
the variable.

n Warning

This is where things get tricky for people who can't code. Your brain has
been taught that the world is flat. Remember in the last exercise where
you put if-statements inside if-statements ? That probably made
your brain hurt because most people do not ponder how to "nest"
things inside things. In programming nested structures are all over the
place. You will find functions that call other functions that have if-
statements that have arrays with arrays inside arrays. If you see a

structure like this that you can't figure out, take out a pencil and paper
and break it down manually bit by bit until you understand it.

We now will build some arrays using some for-loops and print them out:

1 the_count = [1, 2, 3, 4, 5]

2 fruits = ['apples', 'oranges', 'pears', 'apricots']

https://learnrubythehardway.org/book/ex32.html 2/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

3 change = [1, 'pennies', 2, 'dimes', 3, 'quarters']

5 # this first kind of for-loop goes through a list

6 # in a more traditional style found in other languages

7 for number in the_count

8 puts "This is count #{number}"

9 end

10

11 # same as above, but in a more Ruby style

12 # this and the next one are the preferred

13 # way Ruby for-loops are written

14 fruits.each do |fruit|

15 puts "A fruit of type: #{fruit}"

16 end

17

18 # also we can go through mixed lists too

19 # note this is yet another style, exactly like above

20 # but a different syntax (way to write it).

21 change.each {|i| puts "I got #{i}" }

22

23 # we can also build lists, first start with an empty one

24 elements = []

25

26 # then use the range operator to do 0 to 5 counts

27 (0..5).each do |i|

28 puts "adding #{i} to the list."

29 # pushes the i variable on the *end* of the list

30 elements.push(i)

31 end

32

33 # now we can print them out too

34 elements.each {|i| puts "Element was: #{i}" }

https://learnrubythehardway.org/book/ex32.html 3/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

You should immediately see that Ruby has two kinds of loops that I am calling a
for-loop . In programming the term for-loop just means "a loop that goes

through each thing in an array of things." In Ruby this is both for number in
the_count style, and the more common fruits.each style. You should use the

.each version as it is more reliable and what other Ruby programmers expect

you to write.

n Warning

Ruby programmers are very particular about how their for-loops are
written and will declare you a bad programmer for simply using this
one construct wrong. They went so far as to break the for-each
version of looping so that there are problems with using it, forcing you
to conform to their culture. Heed my warning that you should always
use .each and never for-each for fear of being forever branded bad
and shunned. Yes, it is as ridiculous as it sounds.

What You Should See

https://learnrubythehardway.org/book/ex32.html 4/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

$ ruby ex32.rb

This is count 1

This is count 2

This is count 3

This is count 4

This is count 5

A fruit of type: apples

A fruit of type: oranges

A fruit of type: pears

A fruit of type: apricots

I got 1

I got pennies

I got 2

I got dimes

I got 3

I got quarters

adding 0 to the list.

adding 1 to the list.

adding 2 to the list.

adding 3 to the list.

adding 4 to the list.

adding 5 to the list.

Element was: 0

Element was: 1

Element was: 2

Element was: 3

Element was: 4

Element was: 5

https://learnrubythehardway.org/book/ex32.html 5/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

Study Drills

1 Take a look at how you used (0..5) in the last for-loop . Look up Ruby's
"range operator" ( .. and ... ) online to see what it does.

2 Change the first for number in the_count to be a more typical .each

style loop like the others.

3 Find the Ruby documentation on arrays and read about them. What other
operations can you do besides the push function? Try << , which is the
same as push but is an operator. fruits << x is the same as
fruits.push(x) .

Common Student Questions

How do you make a 2-dimensional (2D) array?

That's an array in an array like this: [[1,2,3],[4,5,6]]

Aren't lists and arrays the same thing?

Depends on the language and the implementation. In classic terms a list


is very di erent from an array because of how they're implemented. In
Ruby though they call these arrays. In Python they call them lists. Just
call these arrays for now since that's what Ruby calls them.

Why is a for-loop able to use a variable that isn't defined yet?

The variable is defined by the for-loop when it starts, initializing it to


the current element of the loop iteration each time through.

https://learnrubythehardway.org/book/ex32.html 6/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

Learn MORE Python Pre-Order Now

You can now Pre-Order (http://bit.ly/buylmorepthw) Learn More


Python The Hard Way. Get it now at http://bit.ly/buylmorepthw
(http://bit.ly/buylmorepthw) for $29.99 before the price goes up!

Buy DRM-Free

When you buy directly from the author, Zed A. Shaw, you'll get a
professional quality PDF and hours of HD Video, all DRM-free and yours
to download.

$
29. 99
BUY DIRECTLY FROM THE AUTHOR
(HTTPS://SHOP.LEARNCODETHEHARDWAY.ORG/ACCESS/BUY/5/)

pecimen/Source+Serif+Pro),
OR, YOU CAN READ LEARN RUBY THE HARD WAY FOR FREE (HTTPS://LEARNRUBYTHEHARDWAY.ORG/BOOK/)

pecimen/Source+Sans+Pro),
RIGHT HERE, VIDEO LECTURES NOT INCLUDED.

pecimen/Source+Code+Pro). Other Buying Options

https://learnrubythehardway.org/book/ex32.html 7/8
11/21/2017 Learn Ruby the Hard Way - Read for Free

BUY ON AMAZON (HTTP://BIT.LY/AMZNLRTHW)

BUY A HARD COPY FROM THE PUBLISHER (HTTP://BIT.LY/INFORMITLRTHW)

BUY A HARD COPY FROM BARNES & NOBLE (HTTP://BIT.LY/BNLRTHW)

q Previous (ex31.html) Next r (ex33.html)

HOME ABOUT CONTACT


(/) (HTTPS://LEARNCODETHEHARDWAY.ORG/ABOUT/) (HTTPS://LEARNCODETHEHARDWAY.ORG/CONTACT/)

ZED A. SHAW. ALL RIGHTS RESERVED.

(https://twitter.com/lzsthw)

https://learnrubythehardway.org/book/ex32.html 8/8