Ruby Rango (Range)

Los rangos (Range) están en todas partes: desde a hasta z, desde 0 hasta 9, etc. Ruby admite rangos y nos permite usarlos de diferentes maneras:

  • Rangos como secuencias
  • Rangos como condiciones
  • Rangos como intervalos

Rangos como secuencias

El primer y más común uso de los rangos es expresar secuencias. Una secuencia tiene un punto de inicio, un punto final y una manera de producir valores consecutivos en la secuencia.

Ruby usa''..''y''...''operadores de rango para crear estas secuencias. La forma de dos puntos crea un rango que incluye el valor más alto especificado, la forma de tres puntos crea un rango que no incluye el valor más alto especificado.

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

La secuencia 1..100 es unRangeobjeto, que contiene dosFixnumreferencias a objetos. Si es necesario, puede usar elto_amétodo para convertir el rango en una lista. Pruebe el siguiente ejemplo:

Ejemplo

#!/usr/bin/ruby $, =", " #Separador de valores de Array range1 = (1..10).to_a range2 = ('bar'..'bat').to_a puts "#{range1}" puts "#{range2}"

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]

Los rangos implementan métodos que le permiten iterar sobre ellos, y puede verificar su contenido de varias maneras:

Ejemplo

#!/usr/bin/ruby # -*- coding: UTF-8 -*- #Rango especificado digits = 0..9 puts digits.include?(5) ret = digits.min puts "El valor mínimo es #{ret}" ret = digits.max puts "El valor máximo es #{ret}" ret = digits.reject {|i| i < 5 } puts "Los que no cumplen la condición son #{ret}" digits.each do |digit| puts "En el bucle: #{digit}" end

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

true
最小值为 0
最大值为 9
不符合条件的有 [5, 6, 7, 8, 9]
在循环中 0
在循环中 1
在循环中 2
在循环中 3
在循环中 4
在循环中 5
在循环中 6
在循环中 7
在循环中 8
在循环中 9

Rangos como condiciones

Los rangos también se pueden usar como expresiones condicionales. Por ejemplo, el siguiente fragmento de código imprime líneas desde la entrada estándar, donde la primera línea de cada conjunto contiene la palabrastart, y la última línea contiene la palabraend.:

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

Los rangos se pueden usar en una instrucción case:

Ejemplo

#!/usr/bin/ruby # -*- coding: UTF-8 -*- score = 70 result = case score when 0..40 "Calificación pésima" when 41..60 "Casi aprobado" when 61..70 "Calificación aprobatoria" when 71..100 "Buena calificación" else "Calificación incorrecta" end puts result

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

Puntuación de aprobado

Rangos como intervalos

El último uso de los rangos es la detección de intervalos: comprobar si un valor especificado está dentro del rango especificado. Se necesita usar el operador de igualdad === para realizar el cálculo.

Ejemplo

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

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

5 在 (1..10)
c 在 ('a'..'j')
Otras extensiones