Ruby 范围(Range)
-
范围
范围随处可见:1月至12月,0至9,第50至67行,依此类推。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方法将范围转换为列表。尝试以下示例-
尝试一下$, =", " # Array value separator range1 = (1..10).to_a range2 = ('bar'..'bat').to_a puts "#{range1}" puts "#{range2}"
范围实现的方法可以让您以各种方式对其进行迭代并测试其内容-
尝试一下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
-
条件范围
范围也可以用作条件表达式。例如,从标准输入,其中,在每一组的第一行包含单词以下代码片段打印套线开始和最后一行字两端 -while gets print if /start/../end/ end
范围可以在case语句中使用-
尝试一下score = 70 result = case score when 0..40 then "Fail" when 41..60 then "Pass" when 61..70 then "Pass with Merit" when 71..100 then "Pass with Distinction" else "Invalid Score" end puts result
-
区间为间隔
通用范围的最终用途是作为间隔测试:查看某个值是否落在该范围表示的间隔内。使用大小写等于运算符===完成此操作。
尝试一下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
更多内置函数,参考方法,请查阅参考手册。