一个json数组转树形结构的小算法

自己项目中遇到的一个实际问题,想了两天总算想出来了,现在记录备忘下:

func rawModelsToTree(rawModels: [Model], rootNode: String, parentNode: String, childrenNode: String) -> [Model] {

        // 0. 创建根节点
        let rootModels = rawModels.filter { $0.pId == rootNode }

        for model1 in rawModels {
            // 1. 配置根节点
            for rootModel in rootModels {
                if rootModel.id == model1.pId {
                    rootModel.subModel.append(model1)
                }
            }

            // 2. 配置子节点
            for model2 in rawModels {
                // 2.1 之前配置过的根节点排除
                guard rootModels.contains(model1) == false && rootModels.contains(model2) == false else { continue }
                if model1.id == model2.pId { // model1是model2的父
                    model1.subModel.append(model2)
                } else if model2.id == model1.pId { // model1是model2的子
                    model2.subModel.append(model1)
                }
            }
        }
        return rootModels
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,161评论 25 708
  • 作者 笙越安 ——【原谅自己】 回头看,当时的月亮曾经代表谁的心,现在都一样。-张悬 ...
    笙越安阅读 286评论 0 0
  • 今天继续阅读创新者的窘境这本书这本书里他全文讲授了一个成熟的企业是如何成功的错过了一个机会的,在这里总结的一些方面...
    天之巅海无涯阅读 750评论 0 0
  • 我常常在想,我为什么会跨越三千里地来到这里。我以为南方应该是温暖的样子吧,没有寒冷,围上颈巾,带上手套,穿上厚厚的...
    韩梅梅阅读 177评论 0 0
  • 从今天起,把你规划进我的未来 不争分秒,只争朝夕 我爱你 能为你而努力是我这辈子最幸福的事情。
    看清风景阅读 228评论 0 0