Preciso gerar um número aleatório.
Parece que a arc4random
função não existe mais, bem como a arc4random_uniform
função.
As opções que tenho são arc4random_stir()
, arc4random_buf(UnsafeMutablePointer<Void>, Int)
e arc4random_addrandom(UnsafeMutablePointer<UInt8>, Int32)
.
Não consigo encontrar nenhum documento sobre as funções e nenhum comentário nos arquivos de cabeçalho fornece dicas.
swift
arc4random
Big Mac
fonte
fonte
Respostas:
===== Swift 4.2 / Xcode 10 =====
Sob o capô, o Swift usa
arc4random_buf
para fazer o trabalho.===== Swift 4.1 / Xcode 9 =====
arc4random()
retorna um número aleatório no intervalo de 0 a 4 294 967 295drand48()
retorna um número aleatório no intervalo de 0,0 a 1,0arc4random_uniform(N)
retorna um número aleatório no intervalo de 0 a N - 1Exemplos:
arc4random_uniform () é recomendado sobre construções como
arc4random() % upper_bound
, pois evita "modulo bias" quando o limite superior não é uma potência de dois.fonte
Float.random()
atualmente está marcado como Beta , e assim dá'Float' has no member 'random'
Você também pode tentar:
Eu tive que adicionar "UInt32" para fazer funcionar.
fonte
public func arc4random_uniform(_: UInt32) -> UInt32
. Então, estou me perguntando por que converter para o parâmetro emUInt32
? Algo mais está acontecendo aqui?Basta chamar esta função e fornecer o intervalo mínimo e máximo do número e você obterá um número aleatório.
por exemplo, como randomNumber (MIN: 0, MAX: 10) e você obterá um número entre 0 e 9 .
Nota: - Você sempre obterá um número inteiro de saída.
fonte
func randomNumber(MIN: Int, MAX: Int)-> Int{ return Int(arc4random_uniform(UInt32(MAX-MIN)) + UInt32(MIN)); }
Após alguma investigação, escrevi isto:
Agora você pode simplesmente fazer
Math.randomFraction()
para obter números aleatórios [0..1 [sem ter que se lembrar da propagação primeiro. Espero que isso ajude alguém: o)fonte
Atualização com o Swift 4.2:
fonte
Outra opção é usar o algoritmo xorshift128plus :
Este algoritmo tem um período de 2 ^ 128-1 e passa em todos os testes do conjunto de testes BigCrush . Observe que, embora este seja um gerador de números pseudo-aleatórios de alta qualidade com um longo período, não é um gerador de números aleatórios criptograficamente seguro .
Você poderia semeá-lo a partir do tempo atual ou de qualquer outra fonte aleatória de entropia. Por exemplo, se você tivesse uma função chamada
urand64()
que lia umUInt64
de/dev/urandom
, você poderia usá-la assim:fonte
fonte
Em Swift 3:
Irá gerar um número aleatório entre 0 para limitar
fonte
arc4random_uniform(6) + 5
Minha implementação como uma extensão Int. Irá gerar números aleatórios no intervalo
from..<to
fonte
É assim que obtenho um número aleatório entre 2 int's!
uso:
fonte
Outra opção é usar GKMersenneTwisterRandomSource do GameKit. Os documentos dizem:
Exemplo retirado do código de amostra da Apple: https://github.com/carekit-apple/CareKit/blob/master/CareKitPrototypingTool/OCKPrototyper/CareKitPatient/RandomNumberGeneratorHelper.swift
fonte
Estou atrasado para a festa 🤩🎉
Usar uma função que permite alterar o tamanho da matriz e a seleção do intervalo em tempo real é o método mais versátil. Você também pode usar o mapa, por isso é muito conciso. Eu o uso em todos os meus testes de desempenho / avaliação de desempenho.
elements
é o número de itens na matriz,incluindo apenas números de
0...max
O Code Sense / Placeholders se parece com isto.
randArr(elements: Int, max: Int)
10 elementos em minha matriz variando de 0 a 1000.
fonte
você pode usar isso na taxa específica:
fonte
Vamos codificar com Swift para o número aleatório ou string aleatória :)
ele lhe dará a saída aleatoriamente.
fonte
Não se esqueça que alguns números se repetirão! então você precisa fazer algo como ....
meu total de perguntas era 47.
fonte
olha, eu tive o mesmo problema, mas eu insiro a função como uma variável global
Como
obviamente isso não é eficiente, então eu apenas copio e colo o código na função para que possa ser reutilizável, então o xcode sugere que eu defina a var como constante para que meu código seja
bem, isso é uma parte do meu código, então o xcode me diz algo sobre inmutável e inicialização, mas ele compila o aplicativo de qualquer maneira e esse conselho simplesmente desaparece
espero que ajude
fonte