Ruby 范围

范围是一个表示从开始到结束的值序列的对象。默认情况下,范围可以是包含..)或排除...)其结束值的。

这是一个简单的范围示例。阅读本教程的其余部分以了解更多信息。

示例

# 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, 

在这里,包含范围 0..3 包含从 03 的数字,包括结束值 3


范围语法

# Includes the end value
start_value..end_value

# Excludes the end value
start_value...end_value

您可以使用整数、字母或任何可比较和递增的对象来定义范围。


范围的返回值

在 Ruby 中,..... 运算符用于创建 Range 对象。换句话说,范围返回 Range 类型的对象。例如,

numbers = 0..3

puts numbers.class

# Output: Range

要访问内部的值,您可以使用 .to_a 方法将此范围转换为数组


示例 1:包含范围

# 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]

在此示例中,范围 0..3 使用 .to_a 转换为数组,该数组返回所有值,包括结束值。


示例 2:排除范围

# Create an exclusive range that starts at 0 and ends before 4
numbers = 0...4

p numbers.to_a

# Output: [0, 1, 2, 3]

在这里,0...4 创建了一个排除 4 的范围,因此结果数组从 03


示例 3:字符范围

# Lowercase letters
letters = 'a'..'d'
p letters.to_a

# Uppercase letters
caps = 'A'...'E'
p caps.to_a

输出

["a", "b", "c", "d"]
["A", "B", "C", "D"]

在此示例中,'a'..'d' 包含 'd',而 'A'...'E' 排除 'E'


循环中的范围

范围通常用于循环中,以特定次数重复某个操作。

这是一个使用 for 循环的示例

# Iterate the loop five times
for i in 0...5
  puts "#{i} Hello"
end

输出

0 Hello
1 Hello
2 Hello
3 Hello
4 Hello

在这里,范围 0...5 运行循环,从 05(不包括 5)。


条件中的范围

范围也可用于检查某个值是否在特定范围内。例如,

age = 25

if (18..30).include?(age)
  puts "You are a young adult."
end

输出

You are a young adult.

在此示例中,条件评估为 true,因为 25 位于范围 18..30 内。


Case 语句中的范围

范围通常在 case 语句中使用,以简化多个比较。例如,

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

输出

Grade C

在这里,78 匹配范围 70...80,因此它打印 Grade C


无开始/无结束范围

Ruby 还支持没有开始或结束的范围。例如,

无开始范围

# Includes all values less than or equal to 10
range = (..10)

puts range.include?(5)     # true
puts range.include?(15)    # false

在这里,(..10) 匹配任何小于或等于 10≤ 10)的值。

无结束范围

# Includes all values greater than or equal to 5
range = (5..)

puts range.include?(100)   # true
puts range.include?(1)     # false

在这里,(5..) 匹配任何大于或等于 5≥ 5)的值。


常见的 Ruby 范围方法

下面是一些常见的 Range 方法

方法 描述
.to_a 将范围转换为数组。
.include?(value) 检查给定的 value 是否存在于范围内。
.first 返回范围中的第一个值。
.last 返回范围中的最后一个值。
.size 返回范围中的元素数量(仅适用于数字范围)。
.step(n) n 的步长遍历范围;可与代码块或 .to_a 一起使用。

示例 4:范围方法

让我们看一下我们之前未使用过的一些 Range 方法

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

输出

First Element: 1
Last Element: 10
Range Size: 10

Stepping by 2
1
3
5
7
9
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战