`
javatar
  • 浏览: 1699696 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

CommonTemplate准备增加对树结构递归迭代的支持

阅读更多
在应用程序开发中, 经常用到树结构, 如组织机构树, 功能菜单树等等.
树的通常表示为对象内部持有子节点方式, 如:
class Menu {
	String name;
	List<Menu> children;
}

显示时, 递归迭代, 直到children为空或零为止.
用普通的for循环是很难做到的. 如:
$for{menu: menus}
	$for{child: menu.children}
		...
	$end
$end

所以考虑增加一个指令, 可进行内递归循环, 如:
$recur{menu : menus -> children} // -> 后可以为lambda表达式, 如: -> xxx? xxx.children : yyy.children
	${super.menu} // 内递归时, 可以用"super.menu"取到上层菜单.
$end

当然, 指令的具体方案有待考虑,
是否用"recur"命名也有待斟酌,
或者直接用"$tree"? 那样"$for"指令是否类似的用"$list"?
5
3
分享到:
评论
4 楼 javatar 2008-05-06  
嗯, 看起来用宏能够实现, 但提供指令可能会更方便.
3 楼 jasongreen 2008-04-30  
有过类似问题,可以用macro自调用实现。
实现统一指令比较麻烦。
$macro{recur,menu} 
   ...A...
   $for(m:menu.children)// .children -- E
      ..B..//handle m
        $recur(m);
      ..C..//handle m
   $end
   ..D....
$end 

$recur(topMenu)


A、B、C、D、E 均是可配置信息,A,D可省略。B,C 本身是 CT代码

$recur(topMenu,'children()',..B..,..C..) 

这种方式,..B..,..C.. 写的会不爽。

或者使用下面的语法:
$recur(topMenu,'children()')
 $prefix
   ..B..   //but what's the variable name of m, define a default name
 $end
 $suffix
   ..C..   //but what's the variable name of m, define a default name
 $end
$end

2 楼 jianfeng008cn 2008-04-30  
支持!强烈支持!
1 楼 jindw 2008-04-30  
很好很强大!

相关推荐

    java树结构递归里面详细说明

    Java树结构递归详细说明 Java树结构是Java后台常用的数据结构,通过递归写成的。树结构的用法实例包括树目录的总结、函数的参数说明、dtree.js文件的默认图片路径、页面中的书写规则、样式表的使用和页面代码书写的...

    递归与迭代算法及其在JAVA语言中的应用.pdf

    递归与迭代在Java中不仅可以应用于基础算法的实现,还可以应用于更复杂的数据结构和算法,例如树的遍历、图的搜索等。在处理这类问题时,递归的简洁性和迭代的可控性都能发挥其独到之处。 在Java语言的高级应用中,...

    文件检索器 递归迭代搜索

    这种结合了递归和迭代的方法使得搜索过程既全面又高效,能够处理复杂的文件系统结构。 FileSearch.rc 文件可能是资源脚本,包含了应用程序的界面元素,如菜单、对话框和图标等资源定义。Main.ico 可能是应用程序的...

    用递归实现C#树形结构

    在上述代码中,我们通过递归调用实现了对树节点的遍历。 此外,递归还可以用于其他操作,如查找特定值的节点、插入新节点、删除节点等。例如,查找一个值可能涉及递归地检查当前节点的值以及所有子节点的值: ```...

    n后问题--非递归迭代回溯.rar

    n后问题--非递归迭代回溯.rar n后问题--非递归迭代回溯.rar n后问题--非递归迭代回溯.rar n后问题--非递归迭代回溯.rar n后问题--非递归迭代回溯.rar n后问题--非递归迭代回溯.rar

    oracle递归、迭代

    递归查询是Oracle中一种特殊的查询方式,主要用于检索具有层次结构的数据。在Oracle中实现递归查询需要用到`START WITH... CONNECT BY PRIOR`语法。 #### 三、递归查询的基本语法 递归查询的基本语法如下: ```sql...

    树的递归构造算法 C语言

    4. 递归地对右侧序列构建右子树,并将结果设为当前节点的右子节点。 在C语言中,我们可以定义一个`struct TreeNode`来表示树节点,包括节点值和指向左右子节点的指针。例如: ```c typedef struct TreeNode { int...

    matlab递归迭代思路

    在正整数集定义如下迭代序列 n=n/2 若n为偶数;n=3n+1 若n为奇数 从小于一百万的数开始,能够生成最长序列的是哪个数? 例如:13-40-20-10-5-16-8-4-2-1(10次) 文件包含迭代思路

    递归动态树递归动态树

    递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树...

    迭代与递归的区别

    在计算机编程中,迭代与递归是两种常用的解决重复性问题的方法。它们各自有不同的特点和适用场景。理解它们之间的区别,对于编写高效和优雅的代码至关重要。 迭代是一种方法,它通过重复执行一组指令来逐步逼近最终...

    Oracle递归树形结构查询功能

    例如,它可以将每个节点的路径作为字符串返回,便于理解和分析树结构。 在实际应用中,例如组织结构的展示,我们可以创建一个包含部门信息的表`SYS_DEPT`,其中`dept_id`为主键,`par_dept_id`表示父级部门ID,以此...

    jpa单表递归树形结构实现

    // 自定义查询获取整个树结构,例如: Optional&lt;Node&gt; findRootNode(); } ``` 实现递归查询通常需要使用递归算法,但SQL不直接支持。我们可以使用存储过程或者在Java代码中处理。例如,可以使用`...

    0/1背包问题的两种解法--存储优化的递归和自下而上的递归(迭代法)

    0/1背包问题是一个经典的计算机科学中的优化问题,主要出现在资源有限的情况下,如何选择物品以最大化价值。在0/1背包问题中,我们有...同时,熟悉这些算法有助于准备编程竞赛和面试,尤其是涉及算法和数据结构的问题。

    c# 树形递归实例

    在这些控件中,递归可以帮助我们生成或加载树结构。例如,你可以创建一个方法,接收根节点并生成对应的TreeView节点: ```csharp private void BuildTreeView(TreeNode root, TreeView treeView) { TreeNode ...

    第12讲 递归和迭代.pptx

    枚举算法,递归与分治策略,递归与迭代的思想、求最大值最小值、线性查找、二分查找与冒泡排序以及选择与交换排序、插入和希尔排序。本课程除了强调经典的算法理论和模型,亦兼顾编程实践能力。力图使得学员面对复杂...

    递归-----动态树实现递归

    递归在处理树结构数据时尤其有效,因为树本身就是一种自相似的数据结构,非常适合使用递归来遍历、查找或修改。标题“递归-----动态树实现递归”暗示我们将探讨如何利用递归方法来操作动态树。 首先,让我们理解...

    迭代与递归算法

    迭代通常涉及对数组、集合或数据结构的遍历,或者进行数学计算直到满足停止条件。例如,在迭代法求平方根的文档中,可能详细介绍了如何通过不断逼近目标值来计算一个数的平方根。这种方法简单直观,易于理解和实现,...

    使用递归和dom遍历dom树形结构

    在DOM树的情况下,递归非常适合用来遍历整个树结构,因为它可以深入到树的每一层,确保每个节点都被访问。 #### Java实现示例 以下是一个使用递归和DOM来遍历XML文档的Java代码示例: ```java package ...

    DNS迭代查询和递归查询的区别.docx

    "DNS 迭代查询和递归查询的区别" DNS(Domain Name System)是 Internet 中的一个基础设施,提供域名到 IP 地址的映射服务。在 DNS 解析过程中,查询类型是一个关键概念,有两种主要的查询类型:迭代查询和递归查询...

Global site tag (gtag.js) - Google Analytics