J'ai besoin de générer un nombre aléatoire.
Il semble que la arc4random
fonction n'existe plus ainsi que la arc4random_uniform
fonction.
Les options que j'ai sont arc4random_stir()
, arc4random_buf(UnsafeMutablePointer<Void>, Int)
et arc4random_addrandom(UnsafeMutablePointer<UInt8>, Int32)
.
Je ne trouve pas de documentation sur les fonctions et aucun commentaire dans les fichiers d'en-tête ne donne d'indices.
swift
arc4random
Big_Mac
la source
la source
Réponses:
===== Swift 4.2 / Xcode 10 =====
Sous le capot que Swift utilise
arc4random_buf
pour faire son travail.===== Swift 4.1 / Xcode 9 =====
arc4random()
renvoie un nombre aléatoire compris entre 0 et 4 294 967 295drand48()
renvoie un nombre aléatoire compris entre 0,0 et 1,0arc4random_uniform(N)
renvoie un nombre aléatoire compris entre 0 et N - 1Exemples:
arc4random_uniform () est recommandé par rapport aux constructions comme
arc4random() % upper_bound
cela évite le "biais modulo" lorsque la borne supérieure n'est pas une puissance de deux.la source
Float.random()
est actuellement marqué Beta , et donne ainsi'Float' has no member 'random'
Vous pouvez également essayer:
J'ai dû ajouter "UInt32" pour que cela fonctionne.
la source
public func arc4random_uniform(_: UInt32) -> UInt32
. Je me demande donc pourquoi convertir le paramètre enUInt32
? Quelque chose d'autre se passe-t-il ici?Appelez simplement cette fonction et fournissez une plage de nombres minimum et maximum et vous obtiendrez un nombre aléatoire.
Par exemple, comme randomNumber (MIN: 0, MAX: 10) et vous obtiendrez un nombre compris entre 0 et 9 .
Remarque: - Vous obtiendrez toujours en sortie un nombre entier.
la source
func randomNumber(MIN: Int, MAX: Int)-> Int{ return Int(arc4random_uniform(UInt32(MAX-MIN)) + UInt32(MIN)); }
Après quelques recherches, j'ai écrit ceci:
Maintenant, vous pouvez simplement faire
Math.randomFraction()
pour obtenir des nombres aléatoires [0..1 [sans avoir à vous souvenir de l'ensemencement au préalable. J'espère que cela aide quelqu'un: o)la source
Mise à jour avec swift 4.2:
la source
Une autre option consiste à utiliser l' algorithme xorshift128plus :
Cet algorithme a une période de 2 ^ 128 - 1 et passe tous les tests de la suite de tests BigCrush . Notez que s'il s'agit d'un générateur de nombres pseudo-aléatoires de haute qualité avec une longue période, ce n'est pas un générateur de nombres aléatoires cryptographiquement sécurisé .
Vous pouvez l'amorcer à partir de l'heure actuelle ou de toute autre source aléatoire d'entropie. Par exemple, si vous aviez une fonction appelée
urand64()
qui lit unUInt64
from/dev/urandom
, vous pouvez l'utiliser comme ceci:la source
la source
Dans Swift 3:
Il générera un nombre aléatoire entre 0 pour limiter
la source
arc4random_uniform(6) + 5
Mon implémentation en tant qu'extension Int. Générera des nombres aléatoires dans la plage
from..<to
la source
C'est ainsi que j'obtiens un nombre aléatoire entre 2 int!
usage:
la source
Une autre option consiste à utiliser GKMersenneTwisterRandomSource de GameKit. Les documents disent:
Exemple tiré de l'exemple de code d'Apple: https://github.com/carekit-apple/CareKit/blob/master/CareKitPrototypingTool/OCKPrototyper/CareKitPatient/RandomNumberGeneratorHelper.swift
la source
Je suis en retard à la fête 🤩🎉
L'utilisation d'une fonction qui vous permet de modifier la taille du tableau et la sélection de plage à la volée est la méthode la plus polyvalente. Vous pouvez également utiliser la carte pour qu'elle soit très concise. Je l'utilise dans tous mes tests de performance / benchmarking.
elements
est le nombre d'éléments du tableaucomprenant uniquement les nombres de
0...max
Code Sense / Placeholders ressemble à ceci.
randArr(elements: Int, max: Int)
10 éléments dans mon tableau allant de 0 à 1000.
la source
vous pouvez l'utiliser à un taux spécifique:
la source
Permet de coder avec Swift pour le nombre aléatoire ou la chaîne aléatoire :)
il vous donnera une sortie au hasard.
la source
N'oubliez pas que certains nombres se répéteront! vous devez donc faire quelque chose comme ...
mon totalQuestions était de 47.
la source
regardez, j'ai eu le même problème mais j'insère la fonction comme une variable globale
comme
évidemment ce n'est pas efficace, alors je copie et colle simplement le code dans la fonction afin qu'il puisse être réutilisable, puis xcode me suggère de définir la variable comme constante pour que mon code soit
Eh bien, c'est une partie de mon code, donc xcode me dit quelque chose d'inmutable et d'initialisation, mais il crée de toute façon l'application et ce conseil disparaît tout simplement
J'espère que ça aide
la source