我需要生成4百万个9位数的10到10亿个唯一随机数。用零填充直到9位数。
我的脚本对于eq工作(但很慢)。 400000个号码。但不是4百万
我需要文本文件中的数字。它只对CTRL + S输出很好。
有没有办法优化内存/性能?
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
var arr = []
while (arr.length < 4000000) {
var randomnumber = Math.ceil(Math.random() * 100000000)
if (arr.indexOf(randomnumber) > -1) continue;
arr[arr.length] = randomnumber;
}
for (i = 0; i < arr.length; i++) {
document.write(zeroPad(arr[i], 9) + '<br />');
}
答案 0 :(得分:1)
您可以在generators中使用file write streams和Node.js:
const fs = require('fs');
const writeStream = fs.createWriteStream('numbers.txt', {flags: 'w'});
writeStream
.on('error', error => console.log(error))
.on('close', () => console.log('done'));
const uniques = [];
function write10k() {
let i = 0;
while (i < 1e4) {
const randomnumber = Math.ceil(Math.random() * 1e8);
if (uniques.indexOf(randomnumber) > -1) continue;
uniques[uniques.length] = randomnumber;
const line = zeroPad(randomnumber, 9) + '\n';
writeStream.write(line);
i++;
}
}
function* writeGenerator() {
for (let i = 1; i <= 4e6; i++) {
yield write10k();
console.log('wrote ' + (1e3 * i));
}
writeStream.end();
}
function zeroPad(num, places) {
const zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join('0') + num;
}
const iter = writeGenerator();
let next = iter.next();
while (!next.done) {
next = iter.next();
}
这将创建包含400万个唯一随机数的文件numbers.txt
。
答案 1 :(得分:0)
这是一个打印在某些包装上的数字,印刷公司会将这些数字放在文本文件中。
我最后只是编辑了我的代码并以不同的间隔运行了10次。
我肯定会看一下node.js
感谢您的输入