rails metodos longitud lista funciones elemento crear como clases arreglos arreglo array agregar ruby-on-rails ruby random secure-random

ruby-on-rails - longitud - metodos en ruby



Cómo obtener un número aleatorio en Ruby (17)

¿Cómo genero un número aleatorio entre 0 y n ?


¿Que tal este?

num = Random.new num.rand(1..n)


Bueno, lo descubrí. Aparentemente hay una función incorporada (?) Llamada rand:

rand(n + 1)

Si alguien responde con una respuesta más detallada, la marcaré como la respuesta correcta.


Este enlace va a ser útil con respecto a esto;

http://ruby-doc.org/core-1.9.3/Random.html

Y un poco más de claridad a continuación sobre los números aleatorios en ruby;

Generar un número entero de 0 a 10.

puts (rand() * 10).to_i

Genera un número del 0 al 10 de una manera más legible

puts rand(10)

Genera un número del 10 al 15, incluyendo 15

puts rand(10..15)

Números aleatorios no aleatorios

Genera la misma secuencia de números cada vez que se ejecuta el programa

srand(5)

Generar 10 números aleatorios.

puts (0..10).map{rand(0..10)}


La respuesta más simple a la pregunta:

rand(0..n)


No te olvides de sembrar el RNG con srand () primero.


Pruebe array#shuffle método de aleatoriedad de array#shuffle para la aleatorización

array = (1..10).to_a array.shuffle.first


Puedes generar un número aleatorio con el método rand . El argumento pasado al método rand debe ser un integer o un range , y devuelve un número aleatorio correspondiente dentro del rango:

rand(9) # this generates a number between 0 to 8 rand(0 .. 9) # this generates a number between 0 to 9 rand(1 .. 50) # this generates a number between 1 to 50 #rand(m .. n) # m is the start of the number range, n is the end of number range


Que hay de esto

n = 3 (0..n).to_a.sample


Si bien puedes usar rand(42-10) + 10 para obtener un número aleatorio entre 10 y 42 (donde 10 es inclusivo y 42 exclusivo), hay una mejor manera desde Ruby 1.9.3, donde puedes llamar:

rand(10...42) # => 13

Disponible para todas las versiones de Ruby al requerir mi gema de backports .

Ruby 1.9.2 también introdujo la clase Random para que pueda crear sus propios objetos generadores de números aleatorios y tiene una API agradable:

r = Random.new r.rand(10...42) # => 22 r.bytes(3) # => "rnd"

La clase Random sí misma actúa como un generador aleatorio, por lo que llama directamente:

Random.rand(10...42) # => same as rand(10...42)

Notas sobre Random.new

En la mayoría de los casos, lo más simple es usar rand o Random.rand . Crear un nuevo generador aleatorio cada vez que desee un número aleatorio es una idea realmente mala . Si hace esto, obtendrá las propiedades aleatorias del algoritmo de siembra inicial que son atroces en comparación con las propiedades del generador aleatorio en sí .

Si usa Random.new , debería llamarlo tan raramente como sea posible , por ejemplo, una vez como MyApp::Random = Random.new y usarlo en cualquier otro lugar.

Los casos en los que Random.new es útil son los siguientes:

  • estás escribiendo una gema y no quieres interferir con la secuencia de rand / Random.rand que se Random.rand los programas principales
  • quieres secuencias reproducibles separadas de números aleatorios (por ejemplo, uno por hilo)
  • desea poder guardar y reanudar una secuencia reproducible de números aleatorios (tan fácil como los objetos Random pueden calcularse)

Si no solo busca un número, sino también un hex o un uuid, vale la pena mencionar que el módulo SecureRandom encontró su camino desde ActiveSupport hasta el núcleo de ruby ​​en 1.9.2+. Así que sin la necesidad de un marco completo:

require ''securerandom'' p SecureRandom.random_number(100) #=> 15 p SecureRandom.random_number(100) #=> 88 p SecureRandom.random_number #=> 0.596506046187744 p SecureRandom.random_number #=> 0.350621695741409 p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"

Se documenta aquí: Ruby 1.9.3 - Módulo: SecureRandom (lib / securerandom.rb)


Simplemente puedes usar random_number .

Si un entero positivo se da como n, random_number devuelve un entero: 0 <= random_number <n.

Úsalo así:

any_number = SecureRandom.random_number(100)

La salida será cualquier número entre 0 y 100.


Tal vez te ayude. Yo uso esto en mi aplicación

https://github.com/rubyworks/facets class String # Create a random String of given length, using given character set # # Character set is an Array which can contain Ranges, Arrays, Characters # # Examples # # String.random # => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3" # # String.random(10) # => "t8BIna341S" # # String.random(10, [''a''..''z'']) # => "nstpvixfri" # # String.random(10, [''0''..''9''] ) # => "0982541042" # # String.random(10, [''0''..''9'',''A''..''F''] ) # => "3EBF48AD3D" # # BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", ''_'', ''-''] # String.random(10, BASE64_CHAR_SET) # => "xM_1t3qcNn" # # SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"] # BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS] # String.random(10, BASE91_CHAR_SET) # => "S(Z]z,J{v;" # # CREDIT: Tilo Sloboda # # SEE: https://gist.github.com/tilo/3ee8d94871d30416feba # # TODO: Move to random.rb in standard library? def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"]) chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten Array.new(len){ chars.sample }.join end end

https://github.com/rubyworks/facets/blob/5569b03b4c6fd25897444a266ffe25872284be2b/lib/core/facets/string/random.rb

Funciona bien para mí


Una forma fácil de obtener un número aleatorio en ruby ​​es,

def random (1..10).to_a.sample.to_s end


Usar rand(range)

De Ruby números aleatorios :

Si necesitara un entero aleatorio para simular una tirada de un dado de seis caras, usaría: 1 + rand(6) . Un rollo en dados se podría simular con 2 + rand(6) + rand(6) .

Finalmente, si solo necesitas un flotador aleatorio, simplemente llama a rand sin argumentos.

Como Marc-André Lafortune menciona en su respuesta a continuación (subir para votar) , Ruby 1.9.2 tiene su propia clase Random (que Marc-André ayudó a depurar , de ahí el objetivo de 1.9.2 para esa característica).

Por ejemplo, en este juego donde necesitas adivinar 10 números , puedes inicializarlos con:

10.times.map{ 20 + Random.rand(11) } #=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]

Nota:

Es por esto que el equivalente de Random.new.rand(20..30) sería 20 + Random.rand(11) , ya que Random.rand(int) devuelve "un entero aleatorio mayor o igual a cero y menor que argumento ”. 20..30 incluye 30, necesito un número aleatorio entre 0 y 11, excluyendo 11.


puedes hacer rand (rango)

x = rand(1..5)


rango = 10..50

rand (rango)

o

range.to_a.sample

o

range.to_a.shuffle (esto mezclará toda la matriz y puede elegir un número aleatorio por primera o última o cualquiera de esta matriz para elegir uno aleatorio)


rand(6) #=> gives a random number between 0 and 6 inclusively rand(1..6) #=> gives a random number between 1 and 6 inclusively

Tenga en cuenta que la opción de rango solo está disponible en las versiones más nuevas (más de 1.9, creo) de ruby.