导读:最近有一个解析树的业务之前参加过蓝桥杯算法比赛学过一些算法。(还好没有全部忘记哈哈)怕以后忘记这种思路特写此博文。
一、深度优先记得广告中经常听到过抱着试试看的态度买了3个疗程效果不错........ 也经常听人说过什么车到山前必有路船到桥头自然直。哈哈这种思想就是回溯思想也可称为试探思想。
二、业务需求
1.这里我就举一个其他的使用场景我们要获取一遍文章的评论信息评论是联级模式。我们现在要把数据解析成有数据结构的树方便前端解析。
2.
CommentId | 评论表主键 |
ParentCommentId | 二级评论主键 盖楼式 |
TopCommentId | 最上级评论的主键 |
ArticleId | 文章主键 |
三、数据解析
1.现在我们通过文章查询到了所有评论但是没有任何结构返回到前端去小丽师姐还不弄死我呀但是现在我们知道我们所有的数据有主从关系只需要我们按照关系拼接好返回就可以了
2.查询数据我就不演示了直接进行数据组装我们现在知道每条数据都有一个父级ID,如果父级ID是空就代表他是顶级评论就看它有没有子级评论信息。逻辑比较简单但是大家可以自行发散思维。
四、有请代码神君
1.这里主要是用了深度优先搜索代码可以看出现非常简介一直找自己有没有子级评论信息。
/// <summary> /// 组合评论信息 /// </summary> /// <param name="comments">评论池</param> /// <param name="thisCommentModel">当前要找下级的评论</param> void CombinationComment(List<CommentModel> comments, CommentModel thisCommentModel) { //深度搜索返回 comments.ForEach(x => { if (x.Parentcommentid == thisCommentModel.Commentid) { //commentModels这是代表子级评论List<CommentModel>类型 thisCommentModel.commentModels.Add(x); comments.Remove(x); CombinationComment(comments, x); } }); }
2.第二种方法通过多创建几个空间进行数据解析
/// <summary> /// 返回树形结构评论 /// </summary> /// <param name="comments">评论池</param> /// <returns></returns> List<CommentModel> CombinationComment(List<CommentModel> comments) { //返回树 List<CommentModel> result = new List<CommentModel>(); //处理字典 Dictionary<int, CommentModel> pairs = new Dictionary<int, CommentModel>(); //存放字典 comments.ForEach(x => { pairs.Add(x.Commentid, x); }); //解析树 comments.ForEach(x => { //判断是不是存在父级 if (pairs.ContainsKey(x.Parentcommentid.Value)) { pairs[x.Parentcommentid.Value].commentModels.Add(x); } }); return result; }
相关文章
猜您喜欢
- 01-22我与OAuth 2.0那点荒唐的小秘密
- 01-22colab上基于tensorflow2.0的BERT中文多分类
- 01-22PHPStorm 最新版下载
- 01-22高等数学学习笔记
- 01-22OpenCV图像数字化
- 01-22Jenkins-k8s-helm-harbor-githab-mysql-nfs微服务发布平台实战
网友评论
推荐文章
最新文章
- 1使用 LinkedBlockingQueue 实现简易版线程池
- 2vue需要知道哪些才能算作入门以及熟练
- 3GStreamer基础教程13 - 调试Pipeline
- 4牛客在线编程_毕业旅行问题
- 5C#中TripleDES对应Java中的DESede即大家说的3DES附C#及Java加解密结果一致的控制台程序例子
- 6数据结构篇————线性表
- 7PEP 484 类型提示 -- Python官方文档译文 [原创]
- 8[3.0] 一个人开发一个App小程序从0到1删减添加
- 9Java框架之SpringMVC 04-视图解析-Spring表单-JSON-上传下载
- 10如何在匿名thread子类中保证线程安全