有時候我們需要在一定範圍內生成一組不重複的隨機數組,我們可能會這樣做:
//需求:在乙個已知的陣列中,隨機選取一部分組成新的資料,要求陣列元素不重複出現:
//常規實現
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...