Algorithm 算法-TOC编号(目录)
我想实现一个VBA函数,根据行的分组深度对Excel行进行编号 但我认为生成TOC的通用算法更有趣 问题是: 给出“缩进”行列表,如Algorithm 算法-TOC编号(目录),algorithm,pseudocode,Algorithm,Pseudocode,我想实现一个VBA函数,根据行的分组深度对Excel行进行编号 但我认为生成TOC的通用算法更有趣 问题是: 给出“缩进”行列表,如 One Two Three Four Five Six (可以假设“缩进水平”是已知的,并且是输入数据的一部分) 要生成以下输出: 1. One 1.1 Two 1.1.1 Three 1.1.1.1 Four 1.2 Five 2. Six 当然,我的代码已启动并正在运行。。。而且还隐藏在THWoS(羞耻的重担)下
One
Two
Three
Four
Five
Six
(可以假设“缩进水平”是已知的,并且是输入数据的一部分)
要生成以下输出:
1. One
1.1 Two
1.1.1 Three
1.1.1.1 Four
1.2 Five
2. Six
当然,我的代码已启动并正在运行。。。而且还隐藏在THWoS(羞耻的重担)下。使用一个数字堆栈。循环遍历每一行,并检查每一行的缩进级别,没有缩进为级别1
const toc=`
一个
两个
三
四
五
六
七
八
九
十
`;
让堆栈=[];
toc.trim().split(/\n/g).forEach(行=>{
//获取标识级别,其中1没有缩进,以此类推
让level=line.match(/^\s*/)[0]。长度+1;
如果(级别>堆栈长度){
while(级别>堆栈长度)
堆栈推送(1);
}否则{
while(级别<堆栈长度)
stack.pop();
stack[stack.length-1]+;
}
让title=stack.join(“.”+“+line.trim()”;
document.body.appendChild(document.createElement(“div”)).innerText=title;
});代码>此算法假定缩进级别的增加幅度不会超过1个单位。如果是,则必须将所有“跳过”级别设置为1
#use a vector instead, if your language supports it
numbering = {0, 0, 0, 0, 0, 0, 0}
for line in lines:
level = indentLevel(line) #starting from 0
numbering[level] = numbering[level] + 1
numbering[level + 1] = 0 #create it if it doesn't exist
for n = 0 to level - 1
print numbering[n], ".",
print numbering[level], " ", line
所以你有工作代码。那你需要什么?@白痴:我来这里不是为了完成我的工作,而是为了向别人学习更好的方法,如果我能的话,也许还能帮助他们。顺便提一下你为什么要浪费时间在这些评论上?你从来没有提出过具体的问题,请阅读常见问题解答:这不是讨论板。如果我不再回应,请原谅。