Enter your Sign on user name and password.

Forgot password?
Sign In | Subscribe
Start learning today, and be successful in your academic & professional career. Start Today!

Use Chrome browser to play professor video
Justin Mui

Justin Mui

Hashes

Slide Duration:

Table of Contents

I. Introduction to Ruby
Setting Up Your Environment

22m 8s

Intro
0:00
Installing Ruby
0:06
Ruby-lan.org
0:07
Three Ways of Installing Ruby
2:26
Compiling Ruby-Source Code
3:02
Third Party Tools
3:28
Other Implementations of Ruby
4:48
Windows Installation
5:21
RubyInstaller.org
5:22
Mac OSX and Linux Installation
6:13
Mac OSX and Linux Installation
6:14
Setting Up Debian/Linux
6:42
Setting Up Debian/Linux
6:43
Installing HomeBrew
6:56
HomeBrew for MAC OSX
6:57
HomeBrew Wiki
9:44
Installing HomeBrew
10:02
Setting Up Mac OSX
11:46
HomeBrew, RVM, OSX-GCC Installer, and Install Ruby 1.9.3
11:47
Ruby Version Manager (RVM)
12:11
Ruby Version Manager (RVM) Overview
12:12
Installing Ruby Version Manager (RVM): http://rvm.io
12:35
Install RVM with Ruby
14:20
Install RVM with Ruby
14:21
Install OSX-GCC-Installer
16:18
Download and Install Package for Your OSX
16:19
Install Ruby 1.9.3
17:28
Install Ruby 1.9.3
17:29
Test It Out!
18:09
rvm-help & ruby-v
18:10
Example: rvm gemset create educator
18:52
Set It As Default!
20:47
rvm Use 1.9.3@educator--default
20:48
Intro to Ruby

22m 20s

Intro
0:00
What is Ruby?
0:06
What is Ruby?
0:07
Ruby Standard Library
0:52
Who Created Ruby?
1:22
Yukihiro Matsumoto
1:23
History
2:45
The Name 'Ruby'
2:46
Ruby v0.95
3:10
Ruby v1.0
3:56
English Language Mailing List Rubytalk
4:08
ruby-forum.com & the Mailing Lists
4:27
Ruby In The West
9:51
Ruby on Rails
10:39
The Pragmatic Programmer's Guide to Ruby
11:30
rubyonrails.org
13:34
Current Ruby
14:42
Ruby 1.8.7, Ruby 1.9.3, and Ruby 2.0
14:43
Why Programmers Enjoy Ruby?
15:40
Why Programmers Enjoy Ruby?
15:41
Ruby Is An Interpreted Language
16:21
Ruby Is An Interpreted Language
16:22
What Is It Used For?
16:50
What Is It Used For?
16:51
Ruby is Object-Oriented
18:17
Example: 5.class
18:18
Example: 0.0.class
18:54
Example: true.class
19:03
Example: nil.class
19:12
Object Class
19:19
BasicObject
19:20
Example
19:52
Superclass
20:50
Fixnum → Integer → Numeric → Object
21:32
Basic Tools for Using Ruby

27m 44s

Intro
0:00
Interactive Ruby
0:08
irb: Interactive Command-Line Environment
0:09
Example
0:49
irb-v
0:50
irb-executes terminal
1:02
1.9.3-p125 > 'hi'
1:09
Live Demonstration
1:31
Why Use Interactive Ruby?
2:21
Why Use Interactive Ruby?
2:22
RDoc
3:05
RDoc
3:06
Ruby Core Documentation
3:32
Ruby Core Documentation: Example
5:30
Ruby Core Documentation: Markup
6:12
Ruby Core Documentation: Headings
7:44
Coding Example: RDoc
9:30
Why Use RDoc?
13:02
Learning Core Ruby Functions
13:03
Generating RDoc
15:31
rdoc-help # usage
15:32
Ruby Interpreter
15:57
ruby -- help
15:58
ruby [switches] [-] program [arguments]
16:16
Example: How to Run a Ruby Script
16:28
Rake
18:38
Rake Overview
18:39
Ruby Core Documentation: Rake
19:46
Coding Example: Rake
23:14
Why Was It Created?
24:30
Why Was It Created?
24:31
Lesson Summary
25:13
Lesson Summary
25:14
IDE/script Editors: MacVIM
26:24
Ruby Specifics

20m 45s

Intro
0:00
Ruby Specifics
0:06
Comments
0:51
Hashtags
1:00
Example
1:23
Multi-Line Comment
2:04
Example
3:10
RDoc Comments
4:02
When do you generate an Rdoc?
4:10
Headings and subheadings
4:24
Examples
4:48
Generating an Rdoc - example
4:50
Common Code Conventions
6:28
For every tab use two spaces indentation
7:38
Never use tabs
7:42
Common Code Conventions (Cont.)
8:18
Camel case
8:20
Snake case
9:18
Identifiers
9:44
Constants begin with CAP letter
10:00
Examples
10:10
Identifiers with Different Scoping
10:26
Global
10:34
Instance Variable
10:40
Class Variable
10:46
Examples
10:56
Reserved Keywords
12:22
Do not use reserved keywords in code
12:25
Parentheses are Sometimes Optional
13:04
Functions do not require parentheses
13:16
When in doubt, use parentheses
13:54
Examples
14:10
Newlines Are Statement Terminators
14:20
Examples
15:10
Continuation with a Period
16:20
Period means continue to next line
16:46
Multiple Statements Allowed on a Single Line
17:38
Try not to use semi-colons
17:58
Code Blocks
18:20
Use code blocks for one liners
18:28
Examples
18:40
Recommended for multiple lines
20:16
Ruby Data Types (Part 1)

29m 37s

Intro
0:00
Overview
0:10
Ruby Data Types
0:10
Numbers
0:16
Strings
0:18
Symbols
0:24
Numbers
0:30
Numeric
0:44
Float
0:50
Complex
0:56
BigDecimal
0:58
Rational
1:00
Integer (most popular) - Fixnum and Bignum
1:06
Fixnum stores 31 bits
1:18
Bignum stores larger bits
1:24
All number objects are instances of Numeric
1:28
Integer Literals
2:28
Represent whole-numbers
2:40
Examples - Different bases
2:42
Binary
3:04
Octal
3:30
Hexadecimal
3:44
Examples
4:06
Floating Point Literals
4:45
Examples
4:58
e-value can be capital or lowercase
5:30
Example
5:44
Strings
6:16
Mutable objects
6:18
Used for inserting and deleting text, searching, and replacing
6:26
String Rdoc
6:46
Definition
7:00
String Literals
8:20
Single-Quoted
8:28
Double-Quoted (most used)
8:50
Example
9:32
Escape Sequences
11:10
Newline
11:16
Tab
11:22
Double quote
11:28
Blackslash
11:36
Interpolation
11:50
Sprintf
13:48
Unicode Escaping
14:38
Example
15:50
Delimiters
16:18
Here Documents
17:18
Example
17:25
String Operators
19:58
Concatenation
20:03
Appending
20:40
String Equality
21:04
Example
21:24
Substrings
22:00
Range object (inclusive)
22:22
String Encoding
24:52
Differences between Ruby 1.8 and 1.9
24:56
Symbols
26:02
Definitions
26:04
Examples
26:46
When to use symbols
26:54
Symbols and Strings
27:42
Symbols Rdoc
28:22
Ruby Gems

25m 50s

Intro
0:00
RubyGems
0:08
What are RubyGems?
0:24
RubyGems.org
0:44
How RubyGems are used
2:06
Java's jar utility
2:50
Unix/Linux's tar utility
3:06
What is a Gem?
3:16
Definition of Gem
3:20
Version
3:34
Date
3:44
Author
3:50
Description
5:58
What Are the Uses?
4:18
Uses for Gems
4:22
Installation
5:06
How to install RubyGems
5:30
Updating to the Latest Ruby Gems
5:54
Testing
6:22
Example
6:34
Installing Rake
7:24
Example
7:46
Verifying
9:22
Example
9:56
Structure
10:56
gem.gemspec
11:30
Specification
13:40
What is in the gem?
13:42
Who made it?
13:50
Update gem version
13:58
Example
14:10
Create Our First Gem
17:20
Steps involved
17:28
RubyGems Guides
17:36
Example
20:02
Steps Review
18:56
Create Our First Gem (Cont.)
23:08
Building the gem
19:38
Example
20:00
Installing the gem
22:32
Run it
22:52
Publish it
23:04
Get Some Gems!
25:06
rake
25:14
rails
25:19
fastercsv
25:25
koala
25:37
Ruby Data Types (Part 2)

40m 24s

Intro
0:00
Ruby Data Types
0:15
Boolean
0:21
Arrays
0:27
Hashes
0:33
Range
0:37
Boolean Types
0:42
TrueClass
0:56
FalseClass
1:12
NilClass
1:18
TrueClass Examples
2:48
FalseClass Examples
3:22
Arrays
4:16
Ordered collection of objects
4:22
Can hold different objects
4:32
Starts at index 0
4:50
Array of Strings
5:50
Example
5:52
Arrays (Cont.)
6:20
Can be created using literals
6:22
Can be created using constructors
6:54
Position and indexed value
8:04
Negative Indexed Values
8:56
Shift and Unshift
10:18
Push and Pop
11:38
.delete method
12:38
Addition and Subtraction
13:32
Union and Intersection
14:48
Insert
15:52
Iteration
16:52
Arrays Rdoc
17:48
Hashes
22:08
Maps and Associative Arrays
22:44
Created using the constructor
22:56
Created using a hash literal
24:02
Stored in a hash table
25:26
Example
25:50
Accessing Key-Values
27:46
Deletion
29:48
Iteration
31:04
Hashes Rdoc
32:04
Ranges
36:40
Two dots are inclusive
36:57
Three dots are exclusive
37:16
Example
37:50
Ranges Rdoc
38:24
Objects

1h 5m 46s

Intro
0:00
Objects
0:10
Object References
1:36
Ruby Core
2:16
Example
4:30
Creating New Objects
6:00
New Method
6:08
Initialize Method
6:31
Example
7:18
Garbage Collection
9:54
Global values always reachable
10:25
Object Identity
11:08
Every object has an object identifier
11:20
Object identifier is constant and unique
11:30
Example
11:54
Object Class
12:58
Class method
13:10
Superclass method
13:28
Object Testing
14:46
is_a?
15:49
respond_to?
16:26
String and Regexp
18:10
Comparing two object instances
20:06
Example
23:30
Object Equality
25:48
Comparing objects
25:54
equal?
25:58
Popular way to test for equality
27:16
Opposite way to test for equality
27:25
Arrays
28:30
Hash
29:42
Case equality operator
30:47
Class tests
31:16
Range tests
31:48
Symbol tests
32:32
Object Conversion
33:14
Explicit conversion
33:54
Implicit conversion
35:00
Example
36:12
Object Conversion: Kernel Module
38:22
Array
38:38
Float
39:26
Integer
39:58
String
40:10
Example
40:34
Object Conversion: Coerce
42:00
Used for mixed type numeric operations
42:08
Example
43:40
Object Conversion: Boolean
47:42
Every object has a boolean value
47:44
Example
48:54
Object Copying
50:52
dup
50:58
clone
51:03
Example
51:42
Object Freezing
57:36
Object Marshaling
58:38
Save state
59:04
Load state
59:27
Example
59:32
Tainted Objects
1:01:50
taint
1:02:08
farm field
1:02:12
Untrusted Objects
1:04:06
trust
1:04:24
untrust
1:04:34
untrusted?
1:04:42
Loops

38m 54s

Intro
0:00
Loops
0:12
while and until
0:48
for and in
0:54
iterators
1:04
enumerable in objects
1:06
While-loop
1:14
Will keep going is condition is true
1:18
Until-loop
2:58
Will keep going until condition becomes true
3:06
Single Expression Loops
4:20
Compact form
4:30
Expressed as a modifier
4:42
Do-While Loop
5:52
Executes body first
6:06
Do-Until Loop
7:54
Similar to do-while loop
7:58
Using Break Inside Loops
8:54
break
8:58
For-In Loop
11:56
for-loop
12:06
var
12:34
collection
12:54
body
13:00
Examples
13:08
Examples (Cont.)
15:54
Nested loops
16:40
Numeric Iterators
18:32
upto
18:40
downto
18:42
times
18:48
Examples
20:28
External Iterators
21:00
Enumerator class
21:04
Rdoc
21:16
Enumerables in Objects
24:35
Enumerable is a mix-in
24:41
RDoc
25:24
Commonly Used Enumerables in Objects
27:01
Array
27:19
Hash
27:51
Range
28:47
Examples
29:29
Enumerables in Objects (Cont.)
31:13
File Processing
31:15
Example
31:45
Enumerables in Objects (Cont.)
33:07
collect
33:23
select
34:11
reject
34:59
inject
35:29
Strings

28m 30s

Intro
0:00
Strings
0:08
Why do you want to get familiar with strings?
1:00
String Creation
1:16
new
1:28
empty?
1:50
length or size
2:10
Example
3:12
String Manipulation
4:40
slice
4:56
square brackets [ ]
5:02
token
5:40
[fixnum]
6:52
offset and length
8:40
chaining
12:42
String Insertion
12:56
insert
12:58
positive or negative index
13:46
String Updates
15:24
[token]
15:36
Examples
16:40
chop or chop!
17:54
chomp!
18:56
gsub
20:28
String Deletion
21:38
delete
21:38
String Reversal
22:46
reverse
22:52
String Manipulation
23:16
split(pattern=$, limit)
23:22
pattern
24:10
limit
24:15
upcase or upcase!
25:28
downcase or downcase!
26:02
swapcase
26:24
Incrementing Strings
27:26
next or next!
27:32
Check Out the Other Lessons
28:00
Ruby Data Types Part 1
28:12
Regular Expressions
28:18
Regular Expressions

33m 27s

Intro
0:00
Regular Expressions
0:10
How to create a regular expression
0:48
What goes inside
1:36
Metacharacters
3:10
Bracket expressions
3:14
Quantifiers
3:18
Anchors
3:20
Metacharacters
3:30
word and non-word characters
4:04
digit and non-digit characters
4:44
hexdigit and non-hexdigit characters
4:56
whitespace and non-whitespace characters
5:08
Examples
5:24
POSIX Bracket Expressions
7:48
Non-POSIX Bracket Expressions
9:48
Bracket Expression Examples
10:58
Quantifiers
12:34
Examples
13:30
Character Properties
17:24
Similar to POSIX bracket classes
18:22
More Character Properties
18:48
Examples
19:32
Anchors
20:08
Examples
21:14
Regular Expression Matching: Regexp Object
22:40
match
22:51
Regular Expression Matching: String Object
24:14
match
24:26
Regular Expression Modifier Characters
25:14
pat
25:38
Example
26:42
Regular Expression Modifier Objects
27:14
Example
28:38
Regexp Rdoc
30:40
Arrays

14m 35s

Intro
0:00
Arrays
0:12
Creating an Array with a Block
0:50
Alternative Ways to Create an Array
3:52
Checking the Class
5:14
Iterate through the array
5:26
Call the class method
5:28
Array Shortcuts
6:38
at(index)
6:44
delete_at(index)
7:28
first(n)
8:28
last(n)
9:28
Removing Duplicates
9:58
uniq or uniq!
10:04
Sorting the Array
10:48
sort or sort!
10:54
Getting the Index
11:35
index
11:56
rindex
12:38
Multidimensional Arrays
12:56
flatten
13:33
Check Out the Earlier Lesson
14:16
Ruby Data Types Part 2
14:26
Hashes

27m 48s

Intro
0:00
Hashes
0:12
Creating Hashes
1:18
Setting a Default Value
2:24
Accessing Hashes
4:16
Accessible by keys or by values
4:28
Keys must be unique
4:36
Creating Hashes
5:16
Comma-separated list
5:42
Hash rocket
8:28
Examples
10:16
Iterating Keys and Values
11:43
each_key
12:04
each_value
14:04
Merging Hashes
16:10
merge(other_hash)
16:20
Sorting Hashes
18:46
Replacing Hashes
20:57
replace(other_hash)
21:18
Converting Hashes to Other Classes
22:04
to_a
22:22
to_s
23:22
Example
24:34
Check Out the Earlier Lesson
27:22
Ruby Data Types Part 2
27:32
Math Operations, Part 1

28m 47s

Intro
0:00
Math Objects
0:12
Numeric
0:26
Integer
0:38
Float
1:02
Fixnum
1:14
Bignum
1:56
Rational
2:04
Math
2:24
Math Operations
2:36
Example
3:14
div(numeric)
4:54
divmod(numeric)
6:30
modulo(numeric)
7:23
quo(numeric)
8:18
remainder(numeric)
9:35
Operation Precedence 1 of 3
10:35
Operation Precedence 2 of 3
13:18
Operation Precedence 3 of 3
14:28
Abbreviated Math Operations
14:54
Move the operator in front of the equal sign
15:52
Numbers
16:36
Numeric Class
17:06
Numeric Methods
18:41
ceil
18:52
floor
19:32
round
19:50
Example with Numbers
20:20
Numeric Methods (Cont.)
22:20
truncate
22:28
num.step(limit, step)
23:02
Numeric Rdoc
25:26
Math Operations, Part 2

28m 51s

Intro
0:00
Math Operations
0:12
Math Module
0:24
Rational Numbers
0:44
Complex Numbers
0:52
Prime Numbers
0:58
Matrices
1:06
Math Module
1:12
PI and E
1:32
Math Module Methods
2:47
atan2(x,y)
2:56
cos(x)
3:14
exp(x)
3:44
Examples
4:38
log(x)
5:44
log(num, base)
6:34
log10(x)
7:04
sin(x)
7:34
sqrt(x)
7:52
tan(x)
8:06
Math Functions: Part 1 of 3
8:12
Math Functions: Part 2 of 3
9:32
Math Functions: Part 3 of 3
10:19
Math Module Rdoc
11:25
Rational Numbers
13:23
How to use
14:06
Example
15:02
Mathematical Ruby Scripts (Mathn)
16:25
Example
17:28
Complex Numbers
18:26
polar
18:56
rect
19:10
Complex Number Examples
19:18
Prime Numbers
20:14
each(ubound=nil)
20:44
prime?
21:22
Example
21:58
Matrices
23:15
build(row_size, column_size=row_size)
23:44
Example
24:44
Matrix Rdoc
24:58
Dates and Times

26m 1s

Intro
0:00
Dates and Times
0:12
Time Class
0:38
Methods of the Time Class
1:43
now
1:44
at(time)
2:10
Epoch & Unix Timestamp Conversion Tools
3:19
Components of a Time
5:07
Convert Time to an Array
5:54
to_a
6:08
Creating a New Time
6:48
Time.local
7:08
Year is required
7:22
Time.utc
8:12
What should be specified
9:30
More Methods of the Time Class
10:16
strftime(string)
11:26
RDoc
12:50
Date Library
16:46
Initializing a New Date
17:08
Parsing Dates
18:28
parse(string)
18:42
Today's Date
19:19
Date.today
19:22
Tomorrow's Date
20:22
Next
20:28
Next week
21:22
Count Down
21:26
Count Up
22:37
Components of a Date
23:20
Converting to Datetime
23:48
to_datetime
24:00
Initializing a Datetime
24:24
Converting to Time
25:23
self.to_time
25:32
Methods: Part 1

31m 24s

Intro
0:00
What is a Method?
0:12
Basic Method
0:58
Return Value
4:37
return
4:46
Factorial Example
6:18
Example
8:46
Return Two Values
10:06
Set the return keyword
10:14
Collected and returned as an array
10:28
Undefining Methods
11:22
undef method_to_undefine
11:44
Example
12:32
Method Names
13:02
Begin with lowercase letter
13:16
Separate longer words with underscores
13:26
Can end with equal sign, question mark, or exclamation point
14:03
Equal sign
14:26
Method Names with Question Mark
14:44
empty?
15:24
Method Names with Exclamation Point
16:01
mutators
16:12
! means use with caution
16:46
Method Aliases
18:05
alias new_method existing_method
18:42
Operator Methods
20:00
Operators
20:02
Array Operators
20:10
Unary Operators
20:32
Binary Operators
20:40
Example
21:28
Methods and Parentheses
25:00
Optional in most cases
25:20
Required in other cases
27:13
Methods and Blocks
27:54
Associated with blocks
28:18
block_given?
28:26
yield
28:36
Example
29:24
Methods: Part 2

20m 11s

Intro
0:00
Methods with the Unary Ampersand Operator
0:14
&
0:34
Block to a Proc
0:56
Example
2:02
Proc object
3:58
Example
5:04
Methods with Default Values
5:54
Example
7:12
Methods with variable-Length Arguments
8:05
How to create it
8:36
Example
11:06
Using Hashes with Arguments
13:02
Multiple arguments
13:08
Solution
13:30
Example
14:56
Rdoc
18:12
Classes: Part I

26m 51s

Intro
0:00
Classes
0:10
Definition of a class
0:14
Class represents a container
0:32
Can be reused
0:46
Creating our First Class
1:00
Keyword class will create new class
1:06
Name must begin with capital letter
1:30
Instantiating Our First Class
2:46
New will create a new instance of class
2:58
Initializing Values
3:58
Definition of def
4:14
Instance method
5:08
Example
7:02
Defining the to_s Method
8:24
Creating a string representation class
8:34
Example
10:54
Self in the Class
12:16
Definition of self
12:26
Example
13:54
Accessor Methods
15:52
getter methods
16:22
Example
17:00
Setter Methods
18:00
Mutator methods
18:02
Example
19:46
Automating Getter and Setter Methods
21:10
Defined in the module class
21:30
attr_reader
21:54
attr_writer
22:48
attr creates getter and setter methods
23:50
Example
24:28
Notes on Ruby's Accessor Methods
25:32
Classes: Part II

26m 42s

Intro
0:00
Defining Operators
0:10
You can define arithmetic operators
0:32
Unary Operators
0:46
Let's define operators in our class!
0:56
Example
2:52
Class Methods
6:24
Examples
6:56
Opening Up the Class
9:38
Adds an additional method
9:54
Examples
11:04
Array and Hash Access Method
15:40
Use square brackets
16:02
Define your own has access method
16:08
Example
16:56
Enumerating The Values
18:40
Define the each iterator
18:40
Testing for Equality
19:36
Class Triplex
19:50
Examples
20:54
Constants
25:00
Usually defined at the top of class
25:24
Classes: Part III

53m 36s

Intro
0:00
Class Variables
0:14
Example
2:16
Ruby Glass Jar Example
8:50
Class Instance Variables
10:20
Instance variables of class objects
10:46
Advantage of class instance variables
11:18
Examples
11:30
Method Visibility
16:16
Three types of method visibility
16:26
Public methods
17:34
Private methods
17:38
Protected methods
18:04
Invoking Method Visibility
19:21
Public , Protected, and Private Visibility
19:22
Invoking Method Visibility With Arguments
21:39
Example: Invoking Method Visibility
22:12
Class Visibility
23:31
Instance and Class Variables are Private
23:32
Constants are Public
24:00
Makes Existing Class Methods Private
24:27
Makes Existing Class Methods Public
25:08
Example: Class Visibility and class GlassJar
25:43
Subclassing
27:08
Subclassing: Subclass and Superclass
27:09
Example: Subclassing
29:43
Inheritance
30:05
Inheritance
30:06
Example: Inheritance
31:25
Subclassing and Inheritance
31:34
Descendants
31:41
Ancestors
31:56
More On Descendants and Ancestors
32:08
Extending a Class
33:27
Extending a Class
33:28
Coding Example: Extending a Class
34:24
Overriding a Method
36:41
Overriding a Method
36:42
Coding Example: Overriding a Method
37:18
Modifying Methods with Chaining
38:52
Modifying Methods with Chaining
38:53
Super
39:25
Coding Example: Modifying Methods with Chaining
39:51
The Singleton Pattern
44:52
Introduction to The Singleton Pattern
44:53
Setting Up Singleton
45:28
The Instance Method
45:58
Rdoc for Singleton: Usage
46:23
Rdoc for Singleton: Implementation
47:45
Coding Example: Singleton
49:38
Modules

24m 19s

Intro
0:00
Modules
0:04
What is Modules?
0:05
Modules Examples
0:40
Modules: Mix-Ins
3:31
What is a Mix-in?
3:32
Modules: Namespace
4:07
What is a Namespace?
4:08
Why Use a Namespace?
5:13
Example of a Namespace Module
5:59
Example of Mixing in The Module Into the Global Scope
6:00
Modules: Creation
7:04
How to Create a New Module?
7:05
Modules: Usage
8:19
How to Use It?
8:20
class Poker & class Bridge
9:13
Creating Our Module as a Mix-In
9:41
Example of a Module Using Instance Methods
9:42
Coding Example
10:20
Creating Our Module as a Namespace
12:11
Implement Class Methods for the Module
12:12
Coding Example
14:56
Loading Our Module
19:46
Loading Our Module Overview
19:47
Require & Load
20:15
Coding Example: Loading Module
20:48
Lesson Summary
23:36
Loading...
This is a quick preview of the lesson. For full access, please Log In or Sign up.
For more information, please see full course syllabus of Introduction to Ruby
  • Discussion

  • Study Guides

  • Download Lecture Slides

  • Table of Contents

  • Transcription

  • Related Services

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.
  • Learn at your own pace... anytime, anywhere!

Hashes

  • Hashes are an unordered collection of key-value pairs that associate a value with each key
  • Hashes are accessible by keys or by values
  • The keys in a hash must be unique if the key is not specified it will return nil
  • A new hash can be created using the Hash.new constructor or {}
  • The hash can be iterated through using the each_key or each_value method
  • A hash can be converted to a array with to_a method and to a string using the to_s method

Hashes

Lecture Slides are screen-captured images of important points in the lecture. Students can download and print out these lecture slide images to do practice problems as well as take notes while watching the lecture.

  • Intro 0:00
  • Hashes 0:12
  • Creating Hashes 1:18
    • Setting a Default Value
  • Accessing Hashes 4:16
    • Accessible by keys or by values
    • Keys must be unique
  • Creating Hashes 5:16
    • Comma-separated list
    • Hash rocket
    • Examples
  • Iterating Keys and Values 11:43
    • each_key
    • each_value
  • Merging Hashes 16:10
    • merge(other_hash)
  • Sorting Hashes 18:46
  • Replacing Hashes 20:57
    • replace(other_hash)
  • Converting Hashes to Other Classes 22:04
    • to_a
    • to_s
    • Example
  • Check Out the Earlier Lesson 27:22
    • Ruby Data Types Part 2

Transcription: Hashes

Welcome back to Educator.com.0000

Today's lesson is on hashes.0002

What are hashes? Hashes are unordered collections of key-value pairs.0009

They maintain a set of objects known as keys, and each key is associated with a value.0020

Think of it this way: think of a hash as kind of like a table.0033

In this table, you have two ways to look up the values: one way is through keys, and another way is through values.0046

This pretty much sums up how the hash is created.0061

How do we create a hash? You can create a hash in many different ways.0077

The first way is through the constructor--just using hash.new.0084

This is using the normal .new method.0089

The other way, which is more commonly used, is through the curly brackets, which you will see in other languages, too.0098

This is method 1...number 1 and number 2.0108

This is probably the preferred way you will actually see it being created.0112

With the hash, you could also pass in an argument, and if you pass in an argument, it will actually set a default value to your hash.0122

So, if I create a new key, and I were to access it, you would actually see it as a default value if there isn't one that already exists.0130

For example, I have this hash.new, and my default value I'm passing in is the default value 0.0140

Notice: I have this new hash; I haven't declared any keys yet; but then, I'm actually assessing new_key, and it says, "I'm going to give you the default value of 0."0152

You can also...notice that this is optional, but this is our default value here.0170

Now that we have created our hash, and we know how to make a default value for it, we can also run some common hash methods to say, "Is this a new hash?"0194

"Is this hash new? Are there elements in this hash?"0208

One thing we can use is this method called empty?.0212

If you call newhash.empty?, it's going to return true, because we haven't actually added any keys or any values to it.0219

This returns true if there are zero keys.0230

Another method you could look at is this size method.0237

It also returns 0, because there are no keys or values in this hash yet.0244

Now, we are going to look at accessing the hashes.0256

There are many methods and ways to do it.0260

You can access the hash by the key or by the value.0266

These keys must be unique.0272

You can't have a hash with two different types of keys; if you do that, one is going to take precedence over the other, and, in this lookup table of keys, you are only going to have one.0278

It's going to overwrite what is currently existing there if you try to add a second key.0291

By default, keys that do not exist will return nil.0299

You will notice that, in our last slide, we set a default value so it wasn't returning nil--it was returning 0.0305

To create this hash, another way I could do it is using these square brackets.0315

This is kind of an interesting thing just in Ruby; it allows me to use the square brackets and create a value order, and it will create a hash from it.0327

To do this, essentially, I'm going to call a code piece...I call hash--key word--and then, in the square brackets, I'm going to give it an order of the key, the value, the key, the value...and I'm going to continue down that whole list.0340

Notice that this will be an array that has an even number of elements, because of this ordering.0375

When I create the hash using these square brackets, then it's going to convert that to a real hash.0389

For example, I'm using the exact same syntax you see here with the hash square brackets: my first key value here is 2016, and then my value is Brazil.0397

I'm creating a hash of all the Summer Olympics, from newest to oldest.0414

The next one is 2012--that is my key--and my value is London.0420

Let me put a little 1 here, so we know where they are going to.0430

And then 2008--that is a key again--Beijing is a value...this was actually 3; then key--2004: Athens is a value.0438

Notice, after I do this, I push Return; it is going to convert this square in square brackets--the array--and it will make that a Hash.0457

So, we have our hash here.0477

Notice that it automatically converted it to these key-value pairs to follow our hash syntax.0481

Another way you can create this hash is using the curly brackets.0503

We already saw how to do it using the constructor.0510

Now, we can also create the hash by defining the values in there.0513

This is going to make exactly the same end result as the square brackets, but this is a more common way that hashes are built.0518

Let me add here "commonly used"...because it's commonly used in Ruby.0530

Again, we use the exact same thing; notice here, instead, we are using this hash rocket here; this is my hash rocket: it says...I have this key, 2016, but it is pointing to its value, Brazil.0548

I'm using this hash rocket continuously with these key-value pairs: 2012 to London, 2008 to Beijing, 2004 to Athens...and after you press Return, it is going to return you the exact same thing, because you have already defined the hash.0569

It's going to say, "OK, your Summer Olympics points to a hash reference, and here are the values to it."0585

You can also add spaces to this, so you don't have to have all of this in one line.0595

Your coding might be more organized, also.0605

Let me show you how you do that.0608

I have my Summer Olympics, and notice, in my code, I'm going to start off with the first curly brace.0612

I press Return; it doesn't actually end the code--the code will continue--and now I can make it more easily readable.0628

So, I can put here...2016...have my hash rocket...Brazil.0637

Come down to 2012--London.0644

I continue down to Beijing...and 2004, Athens.0649

As you see, the end result: it's going to return the end hash that I created.0662

Also, if I do Summer Olympics, and I just do Return, it also returns the same hash reference.0670

As you can see, Ruby allows me that flexibility; I can add those newlines, those break lines, and I'm still defining the same hash.0680

It just makes it easier for me to code this up--and it makes it easier for people to read, too, which is nice.0690

OK--we went through a lot of hash creation here; let's go back to accessing these hashes.0704

We're going to look at iterating these keys and values.0712

I have my hash already; I've defined it; I have my values; now I'm going to start accessing these keys and values.0716

The first thing I want to do is look at a method called each_key.0723

This goes through my hash, and I can go through all of the different keys in it, and I can do my own code manipulation to what I want to do with it.0729

To do this, you call your hash, hash method each_key, and you pass in these curly braces, and in there, one argument you will get is key, and then block is your actual code.0739

This is going to go through each of your keys and pass in that key value with it, and then, in your code block, you can manipulate it, store it somewhere else...do whatever changes you need to do.0757

It will iterate through your keys, passing key as the parameter--and this is your key as your parameter, right here.0773

For example, we are going through a hash of colors.0783

Again, I have my hash rocket; 1 is defined 'blue', 2 points to red, 3 to yellow, 4 to green, 5 to black.0791

If I run the BestColors, and I just call method each_key, it's going to say that I want to print the keys, one by one.0803

It's first going to print the first key, 1; then it's going to print 2, 3, 4, and 5.0816

After I return, you will notice that the end result is that it's going to show the output 1, 2, 3, 4, and 5.0828

In the same way you have each_key, you also have a method called each_value.0844

With the each_value...it goes through each value, one by one.0849

You have your list of values, and it ignores the key; you're just going to go through all your values.0853

Same thing: here is your method; your parameter is val; and the block it's defined to.0862

Now, the val is something I've defined; you could actually call it something else, but that parameter, val, will be your value.0873

Let's go through an example with the BestColors again--the exact same example I just showed you.0884

For our code block here--let's put this as our code block...this is our val, and each value--notice how this, down here, matches up with the syntax up there.0890

Our code block says, "I want you to print the value, and then append a space there."0913

I press return; the first thing it's going to do is to print out the first value, blue; add the space; red; space, yellow, green, and black.0922

You take this code; you put it in your IRB; press Return; the result will be blue, red, yellow, green, and black.0938

Pretty easy, huh? It's pretty simple, but it's nice to know that you have these methods to handle these things and get things out of the hash that it wouldn't normally do.0953

Next, let's look at merging hashes.0966

We have this method called merge: it takes in a parameter called other_hash.0970

I call it other_hash; it just takes in another hash, OK?0978

This method will return a new hash that contains the contents of your other hash and your self.0982

It's going to merge them together.0992

Duplicate keys will return the other_hash entry.0994

So, I have my hash here in a, and I'm merging hash b: b takes precedence--that is what it means.1000

Let's look at an example.1012

I have a hash called NorCal and one called SoCal.1015

In my NorCal hash, I have the key value 1 going to San Francisco, 2 to Sacramento, and 3 to San José.1019

For SoCal, I have 4 going to Los Angeles, 1 to San Diego, 6 to Anaheim, and 7 to Irvine.1030

Notice one thing: San Diego has a key 1, and NorCal has a key 1, so there is a conflict here: they have the same key.1039

Now, here in my code, I'm going to call NorCal.merge(SoCal), and I'm creating a new hash called California.1052

I press Return on that: the end result: 1 is going to point to San Diego, 2 to Sacramento, 3 to San José, 4 to Los Angeles, 6 to Anaheim, and 7 to Irvine.1063

There is no SF anymore; SF was removed.1080

Since we merged the SoCal key with San Diego in, that has overridden SF; so it removed that key-value pair altogether.1088

There is no more of this key-value pair here.1102

But notice that, now, we have a bigger hash that combined the two.1109

Next, let's look at sorting hashes.1123

To do this, I have a method called sort: it has two parameters--I'm just calling a and b here, and then you have your normal code block--whatever you want to sort it with.1126

This sort method is extended from Enumerable, and this allows you to sort elements using the Enumerables' sort method here--the less than, equals, greater than sign.1138

For this, we have NorCal: I have my example here again--I have three cities in NorCal: 3 points to San Francisco; 2 to Sacramento; 1 to San José.1155

I do puts; it's going to output that; I'm going to have my hash.1169

But now I want to sort it, but I want to sort it by value.1173

So, I take this structure here, and I'm going to follow that down here--notice, here I have the exact same structure.1179

I have my key-value pairs, a, b, and when I put this [1], that's going to say, "Look at the value, because I want to sort by that value."1194

The end result is: if I press Return on that, Sacramento is going to be first, San Francisco next, and then San José.1208

Also, if I were to use a, zero, b, zero, I could also use that to sort by key.1222

So, depending on your code, that might be more significant.1243

Let's now look at a new method called replace.1255

This is for replacing your hash; it takes your original contents, and it replaces them with the new contents of this other hash.1262

So--overwrites the contents of self with the contents of other_hash...1272

For our example here, I have a hash of three key-value pairs, a, b, c, and then I call the .replace method.1277

I have: a points to 1, c to 500, d to 550--and you will notice that the end result has...the value hash has...only these new elements in there.1291

These two hashes are the same, and the contents of the original one are gone.1308

That is what this method, replace, does.1320

Let's go ahead and look at converting the hash to other classes.1325

First, let's look at the Array class.1332

You have this to_a; if I call this on a hash, it will convert that hash to an Array.1336

We have an example here: I have my hash, a hash of fruits; the a key goes to apple, b to banana, c to carrots.1344

I call .to_a, and it will actually create a multidimensional Array.1355

I have an Array of an Array.1361

Notice, I have a, apple; b, banana; c, carrots; these are my original key-value pairs in the hash, but now they are Arrays of two elements.1373

The next one we will look at is converting to a string.1394

To do that, we have this method called to_s.1402

This is the same method as inspect; if I were to call inspect or .to_s, it would do the identical, same thing.1406

This converts it to a string.1413

For this example, what I wanted to do is take this hash and convert it to a string, but make it really clean, so I actually chained a bunch of methods here...so I'm using some chaining...1416

I have my original hash; then I call a bunch of different methods: I call to_s first to convert it to a string; then I call this gsub method, which is going to remove a lot of stuff that I don't need--that I wouldn't visually be able to see.1435

Then, I call this split method to break it down by the comma and the space.1454

Now, I do want to show you this example to show you how it's doing this, so let's go to our terminal.1463

First, let's go ahead and create our Array.1475

Let's make it even cleaner here; I'm going to use some newlines.1482

OK, so I first created my hash; I'm going to do Foods.to_s.1496

You will notice that I have a lot of stuff here: you have your backward slashes to help escape out those quotes, and you have actual quotes in front of that, and I don't need that, because visually, this does not look clean.1503

I want to remove some of those weird characters.1520

I'm going to create a new variable called nomoreweirdcharacters, and then I'm going to call that again with a string; then I'm going to call my gsub method, and with my gsub, what I want to do is just remove those out of the way.1524

Let's see here--first, I'm going to remove that quote; then I'm going to remove that curly brace, the other curly brace...and let's see if this does it.1541

So, I said to remove the quote, the left curly brace, the right one, and it's a regular expression literal...let's see if that does it.1558

Yes! So, now I have my variable without those characters anymore, but then I want to break it down into an Array so it breaks it out more.1569

OK, call my split...there you go--that will remove that.1597

The end result: we have an Array of three elements; it still has my hash rocket in there, and it looks nice now.1609

That ends up this chaining method, and you got to see that to_s in effect, plus some more methods to massage it even further.1629

Otherwise, that is the end of today's lesson on hashes.1644

Be sure to check out Ruby Datatypes Part 2, where we do go over a lot of the basics of hashes, and it will get you up to speed even further in the hash realm.1649

Thank you for watching Educator.com, and see you next time!1665

Educator®

Please sign in for full access to this lesson.

Sign-InORCreate Account

Enter your Sign-on user name and password.

Forgot password?

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.

Use this form or mail us to .

For support articles click here.