Domanda

array={}
size=10

math.randomseed(os.time())
for i=1,size do
    array[i]=math.random(size)
    if(i>1) then
        for j=1,i do
            if  array[j]==array[i] then
                i=i-1
                break
            end
        end
    end
end

for i=1,size do
    print(array[i])
end
.

Il codice sopra era destinato a generare una serie di numeri casuali da 1 a "dimensione" evitando valori di ripetizione.Ho provato a realizzare quello ripetendo il livello superiore "per" il loop ancora una volta se il valore appena generato è stato presente prima di qualche parte nell'array - riducendo il suo iteratore.In qualche modo non funziona.Perché?

Sta modificando il valore Iteratore dall'interno del ciclo non è possibile?

Esempio di output con valori di ripetizione in array:

>lua5.1 "pairsss.lua"
2
1
10
6
5
2
5
7
7
4
>Exit code: 0
.

Altri suggerimenti

È possibile utilizzare un set invece di un array, come fatto dall'autore della domanda Randomizza i numeri in Lua senza ripetizioni .Come sottolinea una delle risposte, poiché il set si avvicina alle dimensioni della tua gamma di numeri randome (diciamo, hai numeri casuali da 1 a 100 e il tuo set è di dimensioni 50) sarà sempre più difficile trovare un numeronon è già stato sceltoPuoi vederlo per un set di dimensioni 50 e selezionando un numero casuale da 1 a 100, quindi quando hai il set a metà pieno, hai una probabilità del 25-50% di trovare la scelta casuale è già in uso nel tuoimpostato.In tal caso, mescolare è la strada da percorrere, come spiegato in una delle risposte a quel post ( Randomizza i numeri in Lua senza ripetizioni ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top