什么是制作長度為n的隨機字串的好方法,其中的字串只由0和1組成?
- (顯然,字串會在某個時間點后重復,但假設我們有足夠的長度,所以我們不會遇到這種情況) 。
使用math.random()和round,然后直接連接生成的數字是否好呢?
也許有一種方法可以一次性生成所有$n$的數字,而不是像上面那樣在一個回圈中生成?
uj5u.com熱心網友回復:
這里有兩種方法:
function buildStrConcat(n) {
let str = ' '
for (let i = 0; i < n; i ) {
str = Math.floor(Math.random() 0.5)
}
return str
- 使用
from生成一個陣列,然后join
function buildStrArray(n) {
return Array. from({ length: n }, () => Math. floor(Math.random() 0. 5).join(''/span>)
}
注意,我使用floor并加上0.5,而不是使用round,因為它稍微快一點。
我在我的M1 mac上設定n=10000000來計時,兩種方法都得到了大約1000ms。
uj5u.com熱心網友回復:
這里有一個單行代碼,可能會滿足你的需要:
從左邊截斷到你需要的長度。 uj5u.com熱心網友回復: 這里是我要做的。我做了一個函式,它創建了一個包含0和1的字串。
也許有更好的選擇,但它可能會幫助你。
uj5u.com熱心網友回復: 可能有一個更好的方法,而且這在密碼學上并不安全: uj5u.com熱心網友回復: 這個解決方案使用
標籤:(Math.com)
(Math.floor(Math.random() * (99999999 - 1111111)) 111111111).toString(2)function stringMaker(lenght) {
let string = ""/span>;
for (let i = 0; i < lenght; i ) {
string = Math.round(Math.random() )。
}
document.getElementById("number").innerHTML = string;
generateRandomStringOfLength = n =>/span> {
let string = ' '
while (string.length < n) {
if (Math.random() > 0.5) {
string = string.concat(1)
} else string = string.concat(0)
}
return字串。
}
.toString(2)將我們的亂數轉換為基數2,并同時得到一堆0和1(而不是通過四舍五入只得到一個0或1),這大大減少了我們回圈的執行次數。它還使用rando.js來保證加密安全,但是如果你選擇使用Math.random()而不是rando(),你也可以很容易地使用。
function get01String(length){
var str = ""/span>;
while(str.length < length) str = rando() 。 toString(2)。slice(2)。
return str.slice(-length)。
}
console.log(get01String(5) ;
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
<script src="https://randojs. com/2.0.0.js"></script>
