Ruby Range类方法
Ruby提供了一个Range类。Ruby范围描述了一组有起点和终点的值。一个范围的值可以是数字、字符、字符串或对象。它是用 start_point…end_point 、 start_point…endpoint 字面意思或用 : : new 构建的 。 它为代码提供了灵活性并减少了代码的大小。你也可以通过使用 Range.new 创建一个范围 。 一个包含.. . (两个点)的范围意味着从开始值到结束值都包括在内,如果一个范围包含 ...(三个点)意味着它不包括结束值。
示例:
(1..6).to_a # Output= [1, 2, 3, 4, 5, 6]
(1...6).to_a # Output= [1, 2, 3, 4, 5]
注意: 在Ruby中,Ranges可以使用对象来创建,只要这些对象可以使用其<=>操作符进行比较。为了返回顺序中的下一个对象,它提供了对 succ方法的支持。
类方法
new : 这个方法用于从给定的开始和结束值创建一个范围。在这个方法中,如果第三个参数是假的或不包括的,那么这个范围就包括末端对象。否则,它将省略。
Range.new(start, end, exclusive=false)
例子
# Ruby program to illustrate
# new Method
a = 12
b = 15
# Output will be 12..15
Range.new(a, b, false)
输出
12..15
实例方法
- == : 如果obj的起点、终点和第三个参数的值与rng相同,该方法返回true。否则,它将返回false。这个方法的返回类型是布尔值。
rng==obj-->true or false
- 例子
# Ruby program to illustrate
# the use of == method
# Using Range.new class method
a = Range.new(2, 5, false)
b = Range.new(2, 5, false)
# Using == instance method
a == b
- 输出
true
- === : 在这个方法中,如果rng省略了它的末端,那么返回rng.start <= value < rng.end,如果rng是包容的,那么它返回 rng.start <= value<= rng.end。 方便的是,===是比较运算符,case语句使用它。
rng===value --> true or false
- 例子
# Ruby program to illustrate the use
# of === method by case statement
# taking case statement
case 25.67
when 1...55 then puts "Lower"
when 55...85 then puts "Medium"
when 85...100 then puts "Upper"
end
- 输出
Lower
- begin : 此方法返回rng的第一个对象。
rng.begin --> obj
- 例子
# Ruby program to illustrate
# the use of begin method
# Creating range using the new method
b = Range.new(3, 9, false)
# using begin instance method
b.begin
- 输出
3
- each :该方法用于遍历rng中的元素,依次将每个元素传递给块。
rng.each{|j| block} --> rng
- 例子
# Ruby program to illustrate
# the use of each method
# using each method
(40..45).each do |i|
print i, '....'
end
- 输出
40....41....42....43....44....45....
- end : 该方法返回rng的结束对象。
rng.end --> obj
- 例子
# Ruby program to illustrate
# the use of end method
# using end method
a = Range.new(3, 9, false)
a.end
- 输出
9
- eql? : 这个方法检查obj和rng在开始、结束和独占标志方面是否相等。如果obj包含与rng 相同的start、end和exclusive标志值,那么它返回true,否则返回false。
rng.eql?(obj) --> true or false
- 例子
# Ruby program to illustrate
# the use of eql? method
# Constructing ranges
a = Range.new(2, 5, false)
b = Range.new(2, 5, false)
# using eql? method
a.eql?(b)
- 输出
true
- exclude_end? : 如果rng的结尾被省略,该方法返回true,否则返回false。
rng.exclude_end? --> true or false
- 例子
# Ruby program to illustrate the
# use of exclude_end? method
# constructing range
a = Range.new(3, 9, false)
# using exclude_end? method
a.exclude_end?
- 输出
false
- first : 该方法返回rng的起始对象。
rng.first --> obj
- 例子
# Ruby program to illustrate
# the use of first method
# constructing range
a = Range.new(3, 9, false)
# using the first method
a.first
- 输出
3
- last : 该方法返回rng的最后一个对象。
rng.last --> obj
- 例子
# Ruby program to illustrate
# the use of last method
# constructing range
a = Range.new(3, 9, false)
# using last method
a.last
- 输出
9
- member? : 这个方法检查给定值是否是rng的成员。如果给定的值是rng的成员,那么它返回true,否则返回false。
rng.member?(value) --> true or false
- 例子
# Ruby program to illustrate
# the use of member? method
# taking a range
a = 1..10
# using member? method
a.member?(5)
- 输出
true
- include? : 如果obj是rng的一个元素,该方法返回true,否则返回false。
rng.include?(value) --> true or false
- 例如:
# Ruby program to illustrate
# the use of include? method
# using include? method
("A".."G").include?("Z")
- 输出
false
- step :该方法通过将每一个n个 对象传递给区块,对rng 进行迭代。如果范围内有数字,则对一个数字的加法产生连续的元素。否则, 步骤调用succ方法来迭代范围内的元素。
rng.step(n=1){|obj|block} --> rng
参考资料: https://ruby-doc.org/core-1.9.3/Range.html