我是超级无敌杀人王啊啊啊!!!!
Zero镇楼
起因是我想做这样的分层级的列表
数据结构是一种类似树状结构的数据,使用了数组存储子节点
但是我并不想使用递归,因为递归非常野蛮!谁乱用递归谁死!
解决方案很快到你家门口!
然后我写了个迭代器模式的迭代器
首先是迭代器抽象类:
因为js语言里有一个叫Iterator的接口,所以命名加了个后缀。
写个注释定一个树节点的结构体(?)
先看看数据结构和派生的成员函数,代码中注释没写那么清楚,gi是使用下标记录路径的数组,gg是使用对象的引用记录路径的数组
值得一提的是:为了增加泛用性,我使用了js中的反射机制;但也让这个迭代器更加依赖这个语言了。
因为有个成员变量gg一直在记录路径,所以取上一级(父节点)很简单。
下面是比较难的地方,但也没什么难度,只难一点点,要求树状结构无递归遍历。
我并没有魔楞到往函数里掺一堆注释的程度,所以请自行观看。建议先开饭,因为我的代码很下饭。
我的需求中并不需要递归的时候把root也渲染,所以init的时候就next了一次。
而在next中,我把get_now要用到的东西留出来了。
最后get_now,很简单:
迭代器写好后,调用会非常方便,直接写for
完美
这里执行了两次是因为这个文件被引用了两次,并不是这段代码的问题。
最后祝你,身体健康,再见! 下一篇文章我会写如何让列表进行折叠,因为解决方案强依赖于CSS层叠样式表,所以我要分两个文章写。