Un método genérico que puede devolver un entero aleatorio entre 2 parámetros como ruby hace con rand(0..n)
.
Alguna sugerencia?
Un método genérico que puede devolver un entero aleatorio entre 2 parámetros como ruby hace con rand(0..n)
.
Alguna sugerencia?
Mi sugerencia sería un la extensión de función en IntRange para crear randoms como este:
(0..10).random()
TL;DR Kotlin >= 1.3, uno Aleatorio para todas las plataformas
Como de 1.3, Kotlin viene con su propio multi-plataforma generador de números Aleatorios. Se describe en este MANTENER. La extensión se describe a continuación es ahora parte de la Kotlin de la biblioteca estándar, simplemente lo utilizan como este:
Kotlin < 1.3
Antes de 1.3, en la JVM utilizamos
Random
o inclusoThreadLocalRandom
si estamos en el JDK > 1.6.Utilizado como esta:
Si quería que la función sólo para volver a
1, 2, ..., 9
(10
no incluido), un intervalo construido conhasta
:Si estás trabajando con JDK > 1.6, uso
ThreadLocalRandom.actual()
en lugar deRandom()
.KotlinJs y otras variaciones
Para kotlinjs y otros casos de uso que no se permite el uso de
java.util.Random
, ver esta alternativa.También ver este respuesta para las variaciones de mi sugerencia. También incluye una función de extensión en el que el azar
Char
s.java.util.Random
?Genera un entero aleatorio entre
from
(inclusive) yto
(exclusivo)Int
s, puede usar Random#int(tamaño,de,a) en lugar de java-8.Como de kotlin 1.2, usted podría escribir:
(1..3).shuffled().last()
Acaba de ser conscientes de que es grande O(n), pero para una pequeña lista (especialmente de valores únicos) está bien, está bien 😀
Puede crear un función de extensión similar a
java.util.Azar.nextInt(int)
pero que requiere unIntRange
en lugar de unInt
para su límite:Usted ahora puede utilizar con cualquier
al Azar
ejemplo:Si usted no quiere tener que gestionar su propio
Random
instancia, a continuación, puede definir una comodidad método que utiliza, por ejemplo,ThreadLocalRandom.actual()
:Ahora usted puede obtener un entero aleatorio como en Ruby sin necesidad de declarar un
Random
instancia:Posible Variación a mi otra respuesta aleatoria de caracteres
Con el fin de obtener al azar
Char
s, se puede definir una función de extensión como estaSi estás trabajando con JDK > 1.6, uso
ThreadLocalRandom.actual()
en lugar deRandom()
.Para kotlinjs y otros casos de uso que no se permite el uso de
java.util.Random
, esta respuesta ayudará.Kotlin >= 1.3 soporte multiplataforma para el Azar
Como de 1.3, Kotlin viene con su propio multiplataforma generador de números Aleatorios. Se describe en este MANTENER. Ahora puede utilizar directamente la extensión como parte de la Kotlin de la biblioteca estándar, sin definir:
Edificio de @s1m0nw1 excelente respuesta que he hecho los siguientes cambios.
Código:
Caso De Prueba:
Ejemplos al azar en el intervalo [1, 10]
o la utilización de Java Azar
Kotlin >= 1.3, soporte multiplataforma para el Azar
Como de 1.3, la biblioteca estándar proporciona soporte multi-plataforma para randoms, ver este respuesta.
Kotlin < 1.3 en JavaScript
Si usted está trabajando con Kotlin JavaScript y no tienen acceso a
java.util.Random
, los siguientes:Utilizado como esta:
Otra forma de aplicación de s1m0nw1 la respuesta sería acceder a él a través de una variable. No es que sus más eficiente, pero le ahorra de tener que escribir ().
Y ahora se puede acceder como tal
No existe un método estándar que hace esto, pero usted puede crear fácilmente su propio uso de cualquiera de
Math.random()
o la clasejava.util.Random
. Aquí hay un ejemplo de uso de laMath.random()
método:Este es un ejemplo de salida:
Si los números que desea elegir no son consecutivos, puede utilizar
random()
.Uso:
Devuelve uno de los números que están en la lista.
El uso de una función de nivel superior, usted puede lograr exactamente la misma sintaxis de la llamada como en Ruby (como se quiera):
Uso:
Primero, usted necesita un generador de números aleatorios. En Kotlin usted necesita actualmente el uso de la plataforma específicas (no hay un Kotlin construido en uno). Para la JVM es
java.util.Al azar
. Usted tendrá que crear una instancia de ella y, a continuación, llamar arandom.nextInt(n)
.Kotlin estándar lib no ofrecen un Generador de números Aleatorios de la API. Si usted no está en un proyecto multiplataforma, es mejor usar la api de plataforma (todas las demás respuestas de la pregunta que hablar de esta solución).
Pero si usted está en una multiplataforma contexto, la mejor solución es implementar el azar por sí mismo en el más puro kotlin para compartir el mismo generador de números aleatorios entre plataformas. Es más sencillo para dev y pruebas.
Para responder a este problema en mi proyecto personal, puedo implementar un puro Kotlin Lineal Congruential Generador. LCG es el algoritmo utilizado por
java.util.Random
. Siga este enlace si desea utilizar :https://gist.github.com/11e5ddb567786af0ed1ae4d7f57441d4
Mi implementación propósito
nextInt(range: IntRange)
para ti ;).Tener cuidado acerca de mi propósito, LCG es bueno para la mayoría de los casos de uso (simulación, juegos, etc…) pero no es adecuado para el uso de criptografía debido a la previsibilidad de este método.
De Kotlin 1.3 se puede hacer como
No hay necesidad de usar el perfil de la extensión de las funciones más. IntRange tiene un
random()
función de extensión de out-of-the-box ahora.Espero que esto ayude.
Puede crear una función de extensión:
Ronda valor Float:
Método de uso:
De salida:
a ser super duper ))