A range is an object that represents a sequence of values from a start to an end. By default, a range can be either inclusive (..
) or exclusive (...
) of its end value.
Here's a simple example of range. Read the rest of the tutorial to learn more.
Example
# Create a range from 0 to 3 (inclusive)
numbers = 0..3
# Iterating through the range
numbers.each do |i|
print "#{i}, "
end
# Output: 0, 1, 2, 3,
Here, the inclusive range 0..3
contains numbers from 0 to 3, including the end value 3.
Range Syntax
# Includes the end value
start_value..end_value
# Excludes the end value
start_value...end_value
You can use integers, letters, or any object that can be compared and incremented to define the range.
Return Value of a Range
In Ruby, the ..
and ...
operators are used to create a Range
object. In other words, ranges return an object of Range
type. For example,
numbers = 0..3
puts numbers.class
# Output: Range
To access the values inside, you can convert this range into an array using the .to_a
method.
Example 1: Inclusive Range
# Create a range from 0 to 3 (3 is included)
numbers = 0..3
# Convert to array and print it
p numbers.to_a
# Output: [0, 1, 2, 3]
In this example, the range 0..3
is converted into an array using .to_a
, which returns all values including the end.
Example 2: Exclusive Range
# Create an exclusive range that starts at 0 and ends before 4
numbers = 0...4
p numbers.to_a
# Output: [0, 1, 2, 3]
Here, 0...4
creates a range that excludes 4, so the resulting array goes from 0 to 3.
Example 3: Character Ranges
# Lowercase letters
letters = 'a'..'d'
p letters.to_a
# Uppercase letters
caps = 'A'...'E'
p caps.to_a
Output
["a", "b", "c", "d"] ["A", "B", "C", "D"]
In this example, 'a'..'d'
includes 'd'
, while 'A'...'E'
excludes 'E'
.
Range in Loop
Ranges are often used in loops to repeat an action a specific number of times.
Here's an example using a for loop:
# Iterate the loop five times
for i in 0...5
puts "#{i} Hello"
end
Output
0 Hello 1 Hello 2 Hello 3 Hello 4 Hello
Here, the range 0...5
runs the loop from 0 up to, but not including, 5.
Range in Conditions
Ranges can also be used to check if a value lies within a certain span. For example,
age = 25
if (18..30).include?(age)
puts "You are a young adult."
end
Output
You are a young adult.
In this example, the condition evaluates to true
because 25 lies within the range 18..30
.
Range in Case Statement
Ranges are commonly used in case statements to simplify multiple comparisons. For example,
score = 78
case score
when 90..100
puts "Grade A"
when 80...90
puts "Grade B"
when 70...80
puts "Grade C"
else
puts "Grade D or lower"
end
Output
Grade C
Here, 78 matches the range 70...80
, so it prints Grade C
.
Beginless/Endless Ranges
Ruby also supports ranges with no beginning or end. For example,
Beginless Range
# Includes all values less than or equal to 10
range = (..10)
puts range.include?(5) # true
puts range.include?(15) # false
Here, (..10)
matches any value that's less than or equal to 10 (≤ 10
).
Endless Range
# Includes all values greater than or equal to 5
range = (5..)
puts range.include?(100) # true
puts range.include?(1) # false
Here, (5..)
matches any value that's greater than or equal to 5 (≥ 5
).
Common Ruby Range Methods
Some common Range
methods are given below:
Method | Description |
---|---|
.to_a |
Converts the range into an array. |
.include?(value) |
Checks if the given value exists within the range. |
.first |
Returns the first value in the range. |
.last |
Returns the last value in the range. |
.size |
Returns the number of elements in the range (works only with numeric ranges). |
.step(n) |
Iterates over the range in steps of n ; can be used with a block or .to_a . |
Example 4: Range Methods
Let's look at a few Range
methods we haven't used before:
numbers = 1..10
# Get the first range element
puts "First Element: #{numbers.first}"
# Get the last range element
puts "Last Element: #{numbers.last}"
# Get the size of the range
puts "Range Size: #{numbers.size}"
puts "\nStepping by 2"
# From 1 to 10, step by 2
numbers.step(2) do |i|
puts i
end
Output
First Element: 1 Last Element: 10 Range Size: 10 Stepping by 2 1 3 5 7 9