/ / ¿Cómo generar un número aleatorio en Swift sin repetir el número aleatorio anterior? - rápido

¿Cómo generar un número aleatorio en Swift sin repetir el número aleatorio anterior? - rápido

Soy bastante nuevo en Swift y en la lógica de programación en general, así que tengan paciencia conmigo.

¿Cómo puedes generar un número aleatorio entre 0 y 9 en Swift sin repetir el último número generado? Como en el mismo número, no aparecerán dos veces seguidas.

Respuestas

10 por respuesta № 1

Almacena el número anterior generado en una variable.y compara el número generado con el número anterior. Si coinciden se genera un nuevo número aleatorio. Repita la generación de nuevos números hasta que no coincidan.

var previousNumber: UInt32? // used in randomNumber()

func randomNumber() -> UInt32 {
var randomNumber = arc4random_uniform(10)
while previousNumber == randomNumber {
randomNumber = arc4random_uniform(10)
}
previousNumber = randomNumber
return randomNumber
}

14 para la respuesta № 2

Mi solución, creo que es fácil de entender.

var nums = [0,1,2,3,4,5,6,7,8,9]

while nums.count > 0 {

// random key from array
let arrayKey = Int(arc4random_uniform(UInt32(nums.count)))

// your random number
let randNum = nums[arrayKey]

// make sure the number isnt repeated
nums.removeAtIndex(arrayKey)
}

4 para la respuesta № 3

Este es un buen truco para elegir igualmente entre los números que no fueron elegidos anteriormente.

Tienes 10 números, pero solo quieres seleccionarde 9 números (0 a 9, pero excluyendo el número anterior). Si reduce su rango en 1, puede seleccionar entre 9 números aleatorios y luego reemplazar un número repetido con el número superior anterior del rango. De esta manera, solo tienes que generar un solo número aleatorio cada vez y obtienes uniformidad:

var previousNumber = arc4random_uniform(10)   // seed the previous number

func randomNumber() -> UInt32 {
var randomNumber = arc4random_uniform(9)  // generate 0...8
if randomNumber == previousNumber {
randomNumber = 9
}
previousNumber = randomNumber
return randomNumber
}

2 para la respuesta № 4

La forma más fácil de hacer esto es repetir / mientras:

let current = ...
var next: Int

repeat {
next = Int(arc4random_uniform(9))
} while current == next

// Use `next`

0 para la respuesta № 5

Ponga todos los valores que desee en una matriz,genere un número aleatorio usando arc4random_uniform (SIZEOFARRAY) y extraiga el índice del valor aleatorio de la matriz, y luego repita este proceso hasta que la matriz esté vacía.