Necesito generar un número aleatorio.
Parece que la arc4random
función ya no existe tan bien como la arc4random_uniform
función.
Las opciones que tengo son arc4random_stir()
, arc4random_buf(UnsafeMutablePointer<Void>, Int)
y arc4random_addrandom(UnsafeMutablePointer<UInt8>, Int32)
.
No puedo encontrar ningún documento sobre las funciones y ningún comentario en los archivos de encabezado da pistas.
swift
arc4random
Big_Mac
fuente
fuente
Respuestas:
===== Swift 4.2 / Xcode 10 =====
Swift utiliza bajo el capó
arc4random_buf
para hacer su trabajo.===== Swift 4.1 / Xcode 9 =====
arc4random()
devuelve un número aleatorio en el rango de 0 a 4294967295drand48()
devuelve un número aleatorio en el rango de 0.0 a 1.0arc4random_uniform(N)
devuelve un número aleatorio en el rango de 0 a N - 1Ejemplos:
Se recomienda arc4random_uniform () sobre construcciones como,
arc4random() % upper_bound
ya que evita el "sesgo de módulo" cuando el límite superior no es una potencia de dos.fuente
Float.random()
actualmente está marcado como Beta , por lo que da'Float' has no member 'random'
También podrías intentarlo:
Tuve que agregar "UInt32" para que funcione.
fuente
public func arc4random_uniform(_: UInt32) -> UInt32
. Entonces me pregunto por qué convertir al parámetro aUInt32
? ¿Está pasando algo más aquí?Simplemente llame a esta función y proporcione un rango mínimo y máximo de números y obtendrá un número aleatorio.
por ejemplo, como randomNumber (MIN: 0, MAX: 10) y obtendrá un número entre 0 y 9 .
Nota: - Siempre obtendrá como resultado un número entero.
fuente
func randomNumber(MIN: Int, MAX: Int)-> Int{ return Int(arc4random_uniform(UInt32(MAX-MIN)) + UInt32(MIN)); }
Después de algunas investigaciones escribí esto:
Ahora puede hacer
Math.randomFraction()
para obtener números aleatorios [0..1 [sin tener que recordar la siembra primero. Espero que esto ayude a alguien: o)fuente
Actualización con swift 4.2:
fuente
Otra opción es utilizar el algoritmo xorshift128plus :
Este algoritmo tiene un período de 2 ^ 128 - 1 y pasa todas las pruebas de la suite de pruebas BigCrush . Tenga en cuenta que si bien este es un generador de números pseudoaleatorios de alta calidad con un período largo, no es un generador de números aleatorios criptográficamente seguro .
Puede sembrarlo desde el momento actual o desde cualquier otra fuente aleatoria de entropía. Por ejemplo, si tuvieras una función llamada
urand64()
que lea unUInt64
de/dev/urandom
, podrías usarlo así:fuente
fuente
En Swift 3:
Generará un número aleatorio entre 0 para limitar
fuente
arc4random_uniform(6) + 5
Mi implementación como una extensión Int. Generará números aleatorios en el rango
from..<to
fuente
¡Así es como obtengo un número aleatorio entre 2 int!
uso:
fuente
Otra opción es utilizar GKMersenneTwisterRandomSource de GameKit. Los doctores dicen:
Ejemplo tomado del código de muestra de Apple: https://github.com/carekit-apple/CareKit/blob/master/CareKitPrototypingTool/OCKPrototyper/CareKitPatient/RandomNumberGeneratorHelper.swift
fuente
Llego tarde a la fiesta 🤩🎉
Usar una función que le permite cambiar el tamaño de la matriz y la selección de rango sobre la marcha es el método más versátil. También puede utilizar el mapa para que sea muy conciso. Lo uso en todas mis pruebas de rendimiento / evaluación comparativa.
elements
es el número de elementos en la matriz quesolo incluye números de
0...max
Code Sense / Placeholders se ven así.
randArr(elements: Int, max: Int)
10 elementos en mi matriz que van de 0 a 1000.
fuente
puede usar esto en una tarifa específica:
fuente
Permite codificar con Swift para el número aleatorio o la cadena aleatoria :)
le dará una salida al azar.
fuente
¡No olvide que algunos números se repetirán! así que necesitas hacer algo como ...
mi total de preguntas fue 47.
fuente
mira, tuve el mismo problema pero inserto la función como una variable global
como
obviamente, esto no es eficiente, así que simplemente copio y pego el código en la función para que pueda ser reutilizable, luego xcode me sugiere que establezca la var como constante para que mi código sea
bueno, eso es parte de mi código, así que xcode me dice algo de inmutable e inicialización, pero de todos modos construye la aplicación y ese consejo simplemente desaparece
Espero eso ayude
fuente