質問

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
.

上記のコードは、1から 'サイズ "の繰り返し値を回避するための乱数の配列を生成することを意味していました。イテレータを減らすことで、新しく生成された値が配列のどこかに存在していた場合、一度上位レベルのループを繰り返すことで、1回のループを繰り返すことを試みました。どういうわけかそれはうまくいきません。なぜ?

ループの内側からイテレータ値を変更していませんか?

配列の繰り返し値を持つ出力例:

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

役に立ちましたか?

他のヒント

質問の作者によって行われるように、配列の代わりにセットを使用することができます。繰り返しのないLUAの数をランダム化する。回答の1つが指摘しているように、あなたのセットはあなたのRandome数の範囲にサイズが近づくにつれて(言い、あなたは乱数1から100がサイズ50を持っています)それは数字を見つけるのはますます難しくなるでしょう。まだ選んでいません。一連のサイズ50のセットでは、1から100までのランダムなものを選ぶことができます。それからあなたがセットを半分いっぱいにしている時までに、あなたはランダムピックがすでにあなたの内ですでに使用されていることを見つける可能性が25-50%のチャンスを持っていますセットする。その場合、その投稿に対する答えの1つ( repeats のないLUAの数をランダム化する。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top