构成长度为N的字符串的最有效方法是什么,其中从a-f,0-9中选择随机字符 [英] What is the most efficient approach to compose a string of length N where random characters are selected from a-f, 0-9
问题描述
要求是确定渲染字符串的最有效方法,例如#1a2b3c
,其中1a2b3c
是从套装中随机选择的
abcdef0123456789
或
[a,b,c,d,e, f,0,1,2,3,4,5,6,7,8,9]
为了统一比较结果,字符串 .length
应该精确 7
,如上例所示。
确定结果时间的迭代次数应为 10000
,如下面的代码所示。
我们可以通过两个预期的例子和基准开始调查。
方法的基准应包括在答案的文本中。请注意,如果可以使用更准确的基准测试,或者可以改进问题文本,请在评论时提出建议。相关:
The requirement is to determine the most efficient approach to render a string, for example, "#1a2b3c"
, where "1a2b3c"
are randomly selected from the set
"abcdef0123456789"
or
["a", "b", "c", "d", "e", "f", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
For the uniformity of comparing results, the string .length
should be precisely 7
, as indicated at example above.
The number of iterations to determine resulting time of procedure should be 10000
as used in the code below.
We can commence the inquiry with two prospective examples and benchmarks. Benchmarks for the approaches should be included within the text of the Answer. Note, if more accurate benchmarks can be utilized, or text of Question can be improved, do advise at comment. Related: Can someone fluent in Javascript explain to me whats going on here SIMPLY.
function randColor() {
return '#' + (function co(lor) {
return (lor += [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'][Math.floor(Math.random() * 16)]) &&
(lor.length == 6) ? lor : co(lor);
})('');
}
console.time("random string recursion");
for (let i = 0; i < 10000; i++) {
randColor()
}
console.timeEnd("random string recursion");
console.time("random string regexp");
for (let i = 0; i < 10000; i++) {
"xxxxxx".replace(/x/g, function() {
return "abcdef0123456789".charAt(Math.floor(Math.random() * 16))
});
}
console.timeEnd("random string regexp");
What is the most efficient, where efficiency is defined as the least amount of resource necessary for "speed" and "storage", to achieve returning a string of having .length
of N
?
Does the efficiency of speed and storage decrease as N
increases?
An alternative approach, assuming that the characters are between [a-f0-9]
. It's efficient both in speed and storage.
function randColor() {
return '#' + (Math.floor(Math.random() * 16777216)).toString(16).padStart(6, '0');
}
console.time("random string hexa");
for (let i = 0; i < 10000; i++) {
randColor()
}
console.timeEnd("random string hexa");
I compared its speed to the methods described in the question, using jsPerf. These are the results: https://jsperf.com/generating-hex-string-of-n-length
这篇关于构成长度为N的字符串的最有效方法是什么,其中从a-f,0-9中选择随机字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!