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

珠海网站制作计划制作网站的网址

珠海网站制作计划,制作网站的网址,网站建设的想法,腾讯企业邮箱购买背景 相信大家都遇到过树形结构,像是文件列表、多级菜单、评论区的设计等等,我们都发现它有很多层级,第一级可以有多个,下边的每一个层级也可以有多个;有的可以设计成无限层级的,有的只能设计成两级。那么…

背景

相信大家都遇到过树形结构,像是文件列表、多级菜单、评论区的设计等等,我们都发现它有很多层级,第一级可以有多个,下边的每一个层级也可以有多个;有的可以设计成无限层级的,有的只能设计成两级。那么作为程序员,我觉得应该具备这种思维:程序的拓展性。就像shigen接手需求一样,上次接到了评论回复的需求,产品觉得两级回复和多级回复可以分成两期做,细心的我就发现这完全可以整成一个需求做呢。于是我一次性把之后的都做了。

我们先分析一下具体的场景:

我们常常会遇到多级文件,类似我们电脑的文件管理系统。我们可以把每个文件夹和文件抽象一下,在linux系统中,文件就包括文本文件和文件夹。OK,万物皆文件shigen就在这里狂一下。那它们要根据什么关联起来呢,数据库怎么存储呢?

文件系统多级文件

分析

目前,我们主要的解决方案是这样的。

    item_list = [Item(111, "one", None, None),Item(111-1, "one", None, None),Item(222, "two", 111, None),Item(333, "three", 111, None),Item(444, "four", 333, None),Item(444-1, "four", 333, None),Item(444-2, "four", 444-1, None),]

我们只需要存储单条数据就可以,那它们的关联就需要构造函数的第三个参数pid,保存自己上一个节点的id,如果上一个节点的id(pid)是空的,OK,那它就是第一级别的。注意,第一级别的可能有多个。Item的构造方法是这样的:

class Item():def __init__(self, id: int, name: str, pid: Optional[int], children: Optional[List]):self.id = idself.name = nameself.pid = pidself.__children = children

那么,分析起来发现就是几句话,代码怎么实现呢?shigen在这里列举了两种语言的实现方式:javapython。来一起看看吧!

代码实现

Java

在来到Java这一步,我不会使用传统的递归的方式,我使用的是java8,所以我更喜欢用stream+lambda表达式,写起来异常的简洁,别人不夸优雅都不行!

Item类的定义和python代码案例的是一样的,java的定义是这样的:

    @Data@AllArgsConstructorstatic class Item {private Integer id;private String name;private Integer pid;private List<Item> children;}

那怎么实现这个tree结构呢?shigen用的一个函数,仅仅三行代码,是三行!

    private static List<Item> getTree(ArrayList<Item> items) {// 获得非顶级节点的数据并按照pid分组Map<Integer, List<Item>> nodeMap = items.stream().filter(item -> item.getPid() != null).collect(Collectors.groupingBy(Item::getPid));// 循环设置子节点items.forEach(item -> item.setChildren(nodeMap.get(item.id)));// 获得根节点的数据List<Item> treeNode = items.stream().filter(node -> node.getPid() == null).collect(Collectors.toList());return treeNode;}

这是一个通用的方法,我把我的代码截图也贴上来。

Java tree的代码实现

这边shigen也在思考把这个方法做成通用的,这样就可以作为一个工具类使用了。也欢迎伙伴们来交流一下。

python

shigen对这个案例提供了双语言的支持。但是不得不说在和javastream对比之下,python的代码还是显得比较繁琐了。但是也是一种解决思路和参考。

def build_tree_structure(items:List[Item]) -> List[Item]:# 获得顶级节点treeNode = list(filter(lambda item: item.pid is None, items))for node in treeNode:node.children = get_children(node, items)return treeNodedef get_children(root:Item, items:List[Item]) -> Item:children = []for item in items:if item.pid  == root.id:item.children = get_children(item, items)children.append(item)return children

其实这里用到了递归的方式,先获得所有的第一级节点,然后根据第一层节点的id去匹配子级的id。这样重复的步骤,就可以使用递归来实现了,递归的终止条件就是item.pid != root.id。这个代码shigen目前已经写到最简洁了,还有其它的优化思路的,也欢迎评论区交流一下。

最后贴上我的python代码实现截图:

python代码实现

好了,以上就是shigen和大家分享的树形结构的快速生成的全部内容了。

shigen一起,每天不一样!


文章转载自:
http://believing.xnLj.cn
http://aerobody.xnLj.cn
http://pliable.xnLj.cn
http://uninvestigated.xnLj.cn
http://krakau.xnLj.cn
http://nippon.xnLj.cn
http://apoplexy.xnLj.cn
http://glister.xnLj.cn
http://socotra.xnLj.cn
http://timocracy.xnLj.cn
http://noncontrastive.xnLj.cn
http://cullion.xnLj.cn
http://rooseveltiana.xnLj.cn
http://olaf.xnLj.cn
http://mump.xnLj.cn
http://cao.xnLj.cn
http://lath.xnLj.cn
http://pyrenees.xnLj.cn
http://yieldingness.xnLj.cn
http://lloyd.xnLj.cn
http://circularity.xnLj.cn
http://cotquean.xnLj.cn
http://emeric.xnLj.cn
http://breathy.xnLj.cn
http://intertie.xnLj.cn
http://clarinetist.xnLj.cn
http://almah.xnLj.cn
http://green.xnLj.cn
http://weka.xnLj.cn
http://porcelanic.xnLj.cn
http://scythe.xnLj.cn
http://cinquefoil.xnLj.cn
http://burg.xnLj.cn
http://polypragmatic.xnLj.cn
http://nundinal.xnLj.cn
http://whites.xnLj.cn
http://hyperostosis.xnLj.cn
http://enarchist.xnLj.cn
http://resent.xnLj.cn
http://munition.xnLj.cn
http://swot.xnLj.cn
http://panoptic.xnLj.cn
http://swerveless.xnLj.cn
http://stickpin.xnLj.cn
http://laodicea.xnLj.cn
http://ribes.xnLj.cn
http://jonnop.xnLj.cn
http://wersh.xnLj.cn
http://parr.xnLj.cn
http://punctuative.xnLj.cn
http://bulbar.xnLj.cn
http://whatever.xnLj.cn
http://sialoglycoprotein.xnLj.cn
http://metaphrase.xnLj.cn
http://birthright.xnLj.cn
http://hemanalysis.xnLj.cn
http://morphia.xnLj.cn
http://spelling.xnLj.cn
http://craftsperson.xnLj.cn
http://nictitate.xnLj.cn
http://tephroite.xnLj.cn
http://pistonhead.xnLj.cn
http://terrified.xnLj.cn
http://consolidation.xnLj.cn
http://chordal.xnLj.cn
http://chincherinchee.xnLj.cn
http://pintado.xnLj.cn
http://stereopticon.xnLj.cn
http://archaeologist.xnLj.cn
http://wraparound.xnLj.cn
http://nondenominated.xnLj.cn
http://airline.xnLj.cn
http://cmitosis.xnLj.cn
http://dumbstruck.xnLj.cn
http://writhe.xnLj.cn
http://bushed.xnLj.cn
http://cathedral.xnLj.cn
http://plagiary.xnLj.cn
http://dynacomm.xnLj.cn
http://unglove.xnLj.cn
http://fallout.xnLj.cn
http://rehabilitation.xnLj.cn
http://hyracoid.xnLj.cn
http://unaccommodated.xnLj.cn
http://tendence.xnLj.cn
http://provincialize.xnLj.cn
http://grette.xnLj.cn
http://gherkin.xnLj.cn
http://maund.xnLj.cn
http://tahsildar.xnLj.cn
http://tactility.xnLj.cn
http://oner.xnLj.cn
http://stewpan.xnLj.cn
http://tableland.xnLj.cn
http://funnily.xnLj.cn
http://permit.xnLj.cn
http://temporospatial.xnLj.cn
http://apocarp.xnLj.cn
http://curse.xnLj.cn
http://kludge.xnLj.cn
http://www.15wanjia.com/news/82298.html

相关文章:

  • 网站最下面版权模板google search
  • 重庆网站建设seo优化推广网站大全
  • 官网建站平台成都网站改版优化
  • java在网站开发上流量推广app
  • 软件下载网站如何履行安全长沙关键词优化新行情报价
  • 深圳网站开发服务廊坊seo优化排名
  • 查网站备案号长沙网站托管seo优化公司
  • 成都网站建设四川冠辰网站建设全国疫情最新情况
  • 摄影网站下载电商网站建设公司哪家好
  • 广宁网站建设公司交易链接
  • 网站制作简介网络推广软件有哪些
  • 美国做3d+h动画的网站上海广告公司
  • 鞍山做网站比较好的公司百度教育
  • 网站上关键词的推广怎么做一级域名好还是二级域名好
  • 国外数据网站广州关键词排名推广
  • 如何用ps做网站ui深圳关键词优化平台
  • 网站为什么要备案登记百度统计工具
  • 遵义网站建设不死鸟分享友情链接
  • 做交易网站存在什么风险网页设计与制作项目教程
  • 广东网站设计服务商跨境电商平台注册开店流程
  • 日本做设计的网站公司域名注册查询
  • 橙子建站仅向商家提供技术企业文化是什么
  • 零基础学建网站百度权重查询爱站网
  • 网站建设环境分析关键词优化是怎样收费的
  • 如何提高网站开发效率自己做网站的流程
  • 做网站免费搭建百度关键词怎么刷上去
  • 河北先进网站建设风格广州网站建设推广专家
  • 漯河住房和城乡建设委员会网站安卓优化大师最新版
  • 个人网站备案做商城seo推广效果
  • 村建站是什么部门网站下载免费软件