[英]Distribute boolean values uniformly over array (Javascript)
我有一個固定長度的 boolean 數組。 值默認為false
。
我需要用 N 個true
值填充數組,這些值大多均勻分布並分布在數組上。
例如:如果長度為 7,N 為 3,它看起來像這樣:
[false, true, false, true, false, true, false]
如果長度為 14,N 為 5,它看起來像這樣:
[false, false, true, false, false, true, false, false, true, false, true, false, true, false]
問題是,對於如何傳播它並沒有嚴格的規則,只是它應該主要以均勻的方式傳播(也許有一個規則,即第一個和最后一個元素不會是真的,但不是必需的)。
function createBoolArray(len, trues) { const arr = new Array(len).fill(false); let leftTrues = trues; let left = len; let divisor = 0; for(let i = 0; i < len && leftTrues > 0;) { left = len - i; divisor = Math.floor(left / leftTrues); if(Math.floor(left / divisor) > leftTrues) { i = i + divisor + 1; arr[i - 1] = true; } else { i = i + divisor; arr[i - 1] = true; } leftTrues--; } return arr; } console.log(createBoolArray(14, 5))
最終這樣做了(類似於@ChrisG 的建議):
function createBoolArray(len, trues) {
const arr = new Array(len).fill(false);
new Array(trues).fill(0).map((_, i) =>
Math.floor((i+1) * (len-1) / trues))
.forEach(e => arr[e] = true);
return arr;
}
console.log(createBoolArray(14, 5))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.