巧用物件,生成不重複隨機數

2021-09-24 07:47:46 字數 1095 閱讀 4386

有時候我們需要在一定範圍內生成一組不重複的隨機數組,我們可能會這樣做:

//需求:在乙個已知的陣列中,隨機選取一部分組成新的資料,要求陣列元素不重複出現:

//常規實現

var arr = [3,5,30,20,21,50,80,6,8,10,15]

//去重一下,不去重,可能造成死迴圈

arr = arr.filter(function(element,index,self));

var getarr = function (len)

while (temparr.length < len)

}//不存在

if(!falg)

}return temparr

}getarr(5)

getarr(6)

getarr(11)

複製**

執行截圖:

可以看到,這樣實現的方式篇幅比較長,中間主要是由於要判斷是否有重複陣列做了大量處理,我們換乙個種方式來實現。

var arr = [3,5,30,20,21,50,80,6,8,10,15]

//去重一下,不去重,可能造成死迴圈

arr = arr.filter(function(element,index,self));

// 物件替換陣列的方式實現:

var getmyarr = function (len)

if(len > arrlen)

while (temparr.length < len)

}console.log(temparr)

return temparr

}getmyarr(5)

getmyarr(6)

getmyarr(11)

複製**

可以看到上面用物件實現的時候,主要區別是在判斷生成的隨機數是否重複的部分。程式將生成的隨機數用物件的方式儲存了起來,然後只需要到物件裡面取值,看是否取到值即可,避免了去原素組裡面遍歷。這樣不僅簡化了實現過程,還提高了**效能。

最後,有疑問的小夥伴可以發郵箱到: [email protected]

不重複隨機數生成

直接上 生成 0,total 的隨機數 最大隨機數 ilist private static ilistgetrandomsequence int total random random new random for var i listbase.count 1 i 0 i return listo...

生成不重複的隨機數

思想是用乙個陣列來儲存索引號,先隨機生成乙個陣列位置,然後把這個位置的索引號取出來,並把最後乙個索引號複製到當前的陣列位置,然後使隨機 數的上限減一,具體如 先把這100個數放在乙個陣列內,每次隨機取乙個位置 第一次是1 100,第二次是1 99,將該位置的數用最後的數 代替。int index n...

隨機數生成(永不重複)

public class randomtreeutils char chars new char char chars new char int treedeeps chars.length int key 7 最多生成7位數 if treedeeps key 返回樹形 arraylist tree...