我正在实现一个变量名生成器,我无法控制所需的变量名的数量,并且认为,使用生成器或记忆函数是要走的路,而不是创建所有排列的列表并保存在内存中.
基本上,我想创建一个以增量方式产生所有排列[a-z][A-Z]的函数。它应该返回如下序列{'a', 'b', ...,'z','aa','ab',....,'az', 'ba', .... 'aA',... 'aTr'...'ZZZ', ...'Z(*52)'}
现在我有,
function* varNameGenerator() {
const all =
'abcdefghijklmnopqrstuvwxyz' + 'abcdefghijklmnopqrstuvwxyz'.toUpperCase();
let prefix = '';
for (let i = 0; i < all.length; i++) {
for (let j = 0; j < all.length; j++) {
yield prefix + all[j];
}
prefix += all[i];
}
}
这有助于生成2705结果,因为输出将是集合中的一个序列{'a', 'b', ...,'aa',...'aZ', 'aba','abb'....,'abZ','abca','abcb','abcc',...,'abcZ','abcda'...},依此类推。这是可用的,但变量名称的长度增加得非常快(每 52 个函数调用)。
那么是否有一种实现可以首先产生最小长度的字母表的所有排列?