当前位置: 首页 > news >正文

建设交通职业技术学院招聘信息网站南宁关键词排名公司

建设交通职业技术学院招聘信息网站,南宁关键词排名公司,嘉兴高端网站,wordpress视频无法播放概述 之前在《【Godot4.2】Tree控件自定义树形数据ETD及其解析》一文中,实现了对带缩进的层级结构文本的解析,并将其用于Tree控件的列表项构造。 不过当时并没有实现专门的类,今天花了一点时间实现了一下。现在可以更方便的构造和解析ETD数…

概述

之前在《【Godot4.2】Tree控件自定义树形数据ETD及其解析》一文中,实现了对带缩进的层级结构文本的解析,并将其用于Tree控件的列表项构造。

不过当时并没有实现专门的类,今天花了一点时间实现了一下。现在可以更方便的构造和解析ETD数据,并转化为其他格式。

并且EasyTreeData类,可以被理解为一个树型数据结构,可以基于它构造数据结构中的树。

本篇就介绍一下这个类的使用方法。

代码

# ========================================================
# 名称:EasyTreeData
# 类型:类
# 简介:专用于构造树形结构数据的类
# 作者:巽星石
# Godot版本:v4.2.2.stable.official [15073afe3]
# 创建时间:202442923:20:02
# 最后修改时间:202443000:57:15
# ========================================================
class_name EasyTreeDatavar _root:EasyTreeItem# ============================ 内部类 ============================
# 单项数据
class EasyTreeItem:var data:Stringvar deep:intvar parent:EasyTreeItemvar children:Array[EasyTreeItem]func _init(_data:String,_deep:int) -> void:data = _datadeep = _deepchildren = []# 输出ETD多行文本格式func _to_string() -> String:var sttr:= "%s%s\n" % ["\t".repeat(deep),data]for child in children:sttr += child.to_string()return sttr# 输出MarkDown带缩进无序列表字符串func to_MD_ul() -> String:var sttr:= "%s- %s\n" % ["\t".repeat(deep),data]for child in children:sttr += child.to_MD_ul()return sttr# 输出可识别的LaTex总结字符串func to_LaTex() -> String:var list_str = "\n/begin{cases}\n%s/end{cases}\n"var sttr:= "%s%s"if children.size()!=0:var subs = ""for child in children:subs += child.to_LaTex() + "//\n"sttr =  sttr % [data,list_str % subs]else:sttr =  sttr % [data,""]return sttr.replace("/","\\")# ============================ 虚函数 ============================
# 转化为字符串
func _to_string() -> String:return "" if !_root else _root.to_string()# 返回ETD多行文本
func get_data() -> String:return _to_string()# 输出MarkDown带缩进无序列表字符串
func to_MD_ul() -> String:return "" if !_root else _root.to_MD_ul()func to_LaTex() -> String:return "" if !_root else _root.to_LaTex()
# ============================ 方法 ============================
# 创建并返回一个EasyTreeItem实例
func create_item(text:String,p_node:EasyTreeItem = null) -> EasyTreeItem:var itm = EasyTreeItem.new(text,0)if _root:if p_node:itm.deep = p_node.deep + 1itm.parent = p_nodep_node.children.append(itm)else:itm.deep = _root.deep + 1itm.parent = _root_root.children.append(itm)else:_root = itmreturn itm# 由多行文本创建
static func new_with_etd_str(etd_str:String) ->EasyTreeData:var edt = EasyTreeData.new()var items = etd_str.split("\n",false)    # 将ETD字符串按行切分为字符串数组var pre_itm:EasyTreeItem                 # 记录前一项var p_itm:EasyTreeItem = null            # 记录父节点# 遍历每行数据for i in range(items.size()):# 第1行直接添加为Tree控件的根节点(跳过下面if部分)# 从第2行开始比较当前行与前一行的缩进深度(也就是\t的数目)if i > 0: var d_deep = deep(items[i-1]) - deep(items[i])  # 与前一行数据的缩进差值match d_deep:-1:                                # 缩进比前一项深:p_itm = pre_itm                # 将前一项作为父节点0:                                 # 缩进深度与前一项一样:p_itm = pre_itm.parent   # 父节点与前一项父节点一样_:                                 if d_deep>0:                   # 缩进比前一项浅# 通过缩进差值计算获得合适的父节点p_itm = pre_itm            for j in range(d_deep+1):p_itm = p_itm.parent# 实际创建和添加TreeItemTree控件var itm:EasyTreeItem = edt.create_item(items[i].replace("\t",""),p_itm)pre_itm = itm                              # 将当前项记录为前一项return edt# 返回字符串的Tab缩进值
static func deep(sttr:String):return sttr.rstrip(" ").count("\t")

使用方法

基础使用

EasyTreeData在使用和API名称上模仿了Godot的Tree控件和TreeItem类。所以熟悉Tree控件和TreeItem的Godoter可以直接零难度上手。

var edt = EasyTreeData.new()             # 创建实例
# 创建根节点
var root = edt.create_item("根节点")  
var itm = edt.create_item("节点1",root)  # 创建根节点的子节点
print(edt)   # 打印输出相应的EDT字符串

输出:

根节点节点1

用ETD多行文本数据创建

你可以用多行文本形式构造一个ETD数据字符串,也就是一个带层级关系和缩进关系的多行文本:

var etd = """
条目1条目1.1条目1.2条目1.2.1条目1.2.2条目1.3
"""

通过调用new_with_etd_str()静态方法,并传入上面的ETD数据字符串,可以构造一个新的EasyTreeData实例。

var edt = EasyTreeData.new_with_etd_str(etd)
print(edt)

输出:

条目1条目1.1条目1.2条目1.2.1条目1.2.2条目1.3

可以看到与传入的ETD数据字符串一致,但是你可以在此基础上继续添加新的数据项。

获取MarkDown的无序列表字符串

print(edt.to_MD_ul())  

输出:

- 条目1- 条目1.1- 条目1.2- 条目1.2.1- 条目1.2.2- 条目1.3

这段代码可以直接粘贴到MarkDown编辑器中,变为带层级的无序列表样式,效果如下:


  • 条目1
    • 条目1.1
    • 条目1.2
      • 条目1.2.1
      • 条目1.2.2
    • 条目1.3

将ETD解析为LaTex总结笔记

print(edt.to_LaTex())

输出:

条目1
\begin{cases}
条目1.1\\
条目1.2
\begin{cases}
条目1.2.1\\
条目1.2.2\\
\end{cases}
\\
条目1.3\\
\end{cases}

粘贴到MarkDown编辑器的LaTex公式中,显示为:
条 目 1 { 条 目 1.1 条 目 1.2 { 条 目 1.2.1 条 目 1.2.2 条 目 1.3 条目1 \begin{cases} 条目1.1\\ 条目1.2 \begin{cases} 条目1.2.1\\ 条目1.2.2\\ \end{cases} \\ 条目1.3\\ \end{cases} 11.11.2{1.2.11.2.21.3
基于此,我们可以很方便的通过简单的层级缩进文本,或者Markdown中带层级缩进的无序列表,实现比较复杂的Latex公式总结笔记的转化。

比如,我们构造如下的ETD字符串:

数据结构线性结构栈队列双端列表列表非线性结构图树

生成的总结笔记:
数 据 结 构 { 线 性 结 构 { 栈 队 列 双 端 列 表 列 表 非 线 性 结 构 { 图 树 数据结构 \begin{cases} 线性结构 \begin{cases} 栈\\ 队列\\ 双端列表\\ 列表\\ \end{cases} \\ 非线性结构 \begin{cases} 图\\ 树\\ \end{cases} \\ \end{cases} 线线{

展望

紧缩字串(暂未实现)

可以将ETD多行文本形式转化为如下的括号嵌套结构的单行字符串。这样更容易压缩存储。

此外,也可以编写相应函数来解析为树形结构数据。

条目1[条目1.1,条目1.2[条目1.2.1,条目1.2.2]条目1.3]

获取字典与JSON形式

在上面基础上,我们可以获取对应的字典以及JSON字符串。

用于树控件

  • 通过提供静态方法,可以用于任意Tree控件的数据项构造。

用于构造菜单

  • 菜单是多个树结构
http://www.hkea.cn/news/732139/

相关文章:

  • 在凡科做网站短视频推广
  • 深圳推广公司推荐q群排名优化软件
  • 什么网站做简历模板宁德市医院
  • 用什么软件做公司网站游戏推广赚佣金的平台
  • 购物网站 后台模板河北seo技术培训
  • 聊城建设委员会官方网站google seo
  • 广西建设网郭业棚seo推广具体做什么
  • 武汉网站seo诊断谷歌下载官网
  • 做地方网站能赚钱吗免费seo网站诊断
  • 图片设计在线网站推广优化外包便宜
  • 武汉平价做网站网络软文推广案例
  • 新产品线上推广方案鞍山seo外包
  • 网站建网站建设和优佛山网络推广培训
  • 毕业设计做网站怎么样微信crm管理系统
  • 个人网站开发多少钱电脑培训班零基础
  • 互联网有哪些岗位宁波免费seo在线优化
  • 惠州做棋牌网站建设哪家技术好哪里的网络推广培训好
  • 如何做线上赌博的网站推广策略有哪些方法
  • 男的女的做那个视频网站百度收录需要多久
  • 大通县wap网站建设公司网站免费制作
  • 哪个网站教做公众号甘肃百度推广电话
  • 网站怎么让百度收录广告网络推广
  • 小型网站设计及建设论文定制网站制作公司
  • 视频网站建设费用排名优化网站seo排名
  • 怎么自己做网站服务器linux百度账号查询
  • 梧州网站推广方案百度热搜 百度指数
  • 网站不兼容ie6自助建站模板
  • 甘肃网站建设公司百中搜优化软件
  • 国内外贸网站建设公司seo教程 百度网盘
  • 一物一码二维码生成系统最好用的系统优化软件