• 雷林鹏分享:Ruby 范围(Range)


      Ruby 范围(Range)

      范围(Range)无处不在:January 到 December、 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}"

      这将产生以下结果:

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

      bar, bas, bat

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

      #!/usr/bin/ruby

      # Assume a range

      digits = 0..9

      puts digits.include?(5)

      ret = digits.min

      puts "Min value is #{ret}"

      ret = digits.max

      puts "Max value is #{ret}"

      ret = digits.reject {|i| i < 5 }

      puts "Rejected values are #{ret}"

      digits.each do |digit|

      puts "In Loop #{digit}"

      end

      这将产生以下结果:

      true

      Min value is 0

      Max value is 9

      Rejected values are 5, 6, 7, 8, 9

      In Loop 0

      In Loop 1

      In Loop 2

      In Loop 3

      In Loop 4

      In Loop 5

      In Loop 6

      In Loop 7

      In Loop 8

      In Loop 9

      作为条件的范围

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

      while gets

      print if /start/../end/

      end

      范围可以用在 case 语句中:

      #!/usr/bin/ruby

      score = 70

      result = case score

      when 0..40: "Fail"

      when 41..60: "Pass"

      when 61..70: "Pass with Merit"

      when 71..100: "Pass with Distinction"

      else "Invalid Score"

      end

      puts result

      这将产生以下结果:

      Pass with Merit

      作为间隔的范围

      范围的最后一个用途是间隔测试:检查某些值是否落在范围表示的间隔里。这是使用 === 相等运算符来完成的。

      #!/usr/bin/ruby

      if ((1..10) === 5)

      puts "5 lies in (1..10)"

      end

      if (('a'..'j') === 'c')

      puts "c lies in ('a'..'j')"

      end

      if (('a'..'j') === 'z')

      puts "z lies in ('a'..'j')"

      end

      这将产生以下结果:

      5 lies in (1..10)

      c lies in ('a'..'j')

      (编辑:雷林鹏 来源:网络)

  • 相关阅读:
    基于网络监听方式的电子邮件实现基础
    在一个存储过程里面执行另一个存储过程的应用
    Vim复制单个字符
    Linux下fsck修复文件系统
    (转载)2011年金山软件C++开发工程师笔试题 关于逆序输出
    (转载)C++ string详解
    (转载)Linux下网络API
    (转载)软中断和硬中断
    (转载)找工作经历总结百度offer
    (转载)Vim入门图解说明
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/10184625.html
Copyright © 2020-2023  润新知