Ruby 教程
1. Ruby 教程 2. Ruby 简介 3. Ruby 环境 4. Ruby 安装 – Linux 5. Ruby 安装 – Windows 6. Ruby 命令行选项 7. Ruby 环境变量 8. Ruby 语法 9. Ruby 类和对象 10. Ruby 类案例 11. Ruby 变量 12. Ruby 运算符 13. Ruby 注释 14. Ruby 条件判断 15. Ruby 循环 16. Ruby 方法 17. Ruby 块 18. Ruby 模块(Module) 19. Ruby 字符串(String) 20. Ruby 数组(Array) 21. Ruby 哈希(Hash) 22. Ruby 日期 & 时间(Date & Time) 23. Ruby 范围(Range) 24. Ruby 迭代器 25. Ruby 文件的输入与输出 26. Ruby File 类和方法 27. Ruby Dir 类和方法 28. Ruby 异常 29. Ruby 正则表达式 30. Ruby CGI 编程 31. Ruby CGI方法 32. Ruby CGI Cookie 33. Ruby CGI Session 34. Ruby 发送邮件 – SMTP 35. Ruby Socket 编程 36. Ruby XML, XSLT 和 XPath 教程 37. Ruby Web Service 应用 – SOAP4R 38. Ruby 多线程 39. Ruby JSON 40. Ruby RubyGems

Ruby 范围(Range)

Ruby 范围(Range)

范围(Range)无处不在:a 到 z、 0 到 9、等等。Ruby 支持范围,并允许我们以不同的方式使用范围:

  • 作为序列的范围
  • 作为条件的范围
  • 作为间隔的范围

作为序列的范围

范围的第一个也是最常见的用途是表达序列。序列有一个起点、一个终点和一个在序列产生连续值的方式。

Ruby 使用 ''..''''...'' 范围运算符创建这些序列。两点形式创建一个包含指定的最高值的范围,三点形式创建一个不包含指定的最高值的范围。

(1..5) #==> 1, 2, 3, 4, 5 (1...5) #==> 1, 2, 3, 4 ('a'..'d') #==> 'a', 'b', 'c', 'd'

序列 1..100 是一个 Range 对象,包含了两个 Fixnum 对象的引用。如果需要,您可以使用 to_a 方法把范围转换为列表。尝试下面的实例:

实例

#!/usr/bin/ruby $, =", " # Array 值分隔符 range1 = (1..10).to_a range2 = ('bar'..'bat').to_a puts "#{range1}" puts "#{range2}"

55面试教程网 »

以上实例运行输出结果为:


[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

["bar", "bas", "bat"]

范围实现了让您可以遍历它们的方法,您可以通过多种方式检查它们的内容:

实例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- # 指定范围 digits = 0..9 puts digits.include?(5) ret = digits.min puts "最小值为 #{ret}" ret = digits.max puts "最大值为 #{ret}" ret = digits.reject {|i| i < 5 } puts "不符合条件的有 #{ret}" digits.each do |digit| puts "在循环中 #{digit}" end

55面试教程网 »

以上实例运行输出结果为:


true

最小值为 0

最大值为 9

不符合条件的有 [5, 6, 7, 8, 9]

在循环中 0

在循环中 1

在循环中 2

在循环中 3

在循环中 4

在循环中 5

在循环中 6

在循环中 7

在循环中 8

在循环中 9

作为条件的范围

范围也可以用作条件表达式。例如,下面的代码片段从标准输入打印行,其中每个集合的第一行包含单词 start,最后一行包含单词 end.

while gets print if /start/../end/ end

范围可以用在 case 语句中:

实例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- score = 70 result = case score when 0..40 "糟糕的分数" when 41..60 "快要及格" when 61..70 "及格分数" when 71..100 "良好分数" else "错误的分数" end puts result

55面试教程网 »

以上实例运行输出结果为:


及格分数

作为间隔的范围

范围的最后一个用途是间隔检测:检查指定值是否在指定的范围内。需要使用 === 相等运算符来完成计算。

实例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- if ((1..10) === 5) puts "5 在 (1..10)" end if (('a'..'j') === 'c') puts "c 在 ('a'..'j')" end if (('a'..'j') === 'z') puts "z 在 ('a'..'j')" end

55面试教程网 »

以上实例运行输出结果为:


5 在 (1..10)

c 在 ('a'..'j')