当前位置:网站首页>Go recursive infinite classification

Go recursive infinite classification

2022-06-12 03:02:00 Give me a bottle of ice cream

Recursive infinite classification

package main

import (
	"encoding/json"
	"io/ioutil"
	"log"
)

type list struct {
	ID int
	Name string
	TopObj  *list
	Pid int
	Child []list
}

func handel(tree *list, v list){
	if v.Pid == 0 {
		v.TopObj = &list{
			Name : tree.Name,
		}
		tree.Child = append(tree.Child, v)
	}else{
		if len(tree.Child) > 0 {
			for key, value := range tree.Child {
				if value.ID == v.Pid {
					v.TopObj = &list{
						Name:   value.Name,
					}
					tree.Child[key].Child = append(tree.Child[key].Child, v)
				}else{
					handel(&tree.Child[key], v)
				}
			}
		}
	}
}

func main() {
	a := []list{
		{
			ID:1,
			Name:"A",
			Pid:0,
		},
		{
			ID:10,
			Name:"Q",
			Pid:0,
		},
		{
			ID:2,
			Name:"b",
			Pid:1,
		},
		{
			ID:3,
			Name:"c",
			Pid:0,
		},
		{
			ID:4,
			Name:"d",
			Pid:3,
		},
		{
			ID:11,
			Name:"aa",
			Pid:0,
		},
		{
			ID:5,
			Name:"E",
			Pid:4,
		},
		{
			ID:12,
			Name:"BB",
			Pid:11,
		},
		{
			ID:13,
			Name:"CC",
			Pid:12,
		},
		{
			ID:14,
			Name:"DD",
			Pid:13,
		},
	}
	root := &list{
		ID:    0,
		Name: "/",
	}
	for _,v  := range a {
		handel(root, v)
	}

	jsonStr, err :=json.MarshalIndent(root," ","\t")
	if err != nil {
		log.Fatalln(err)
	}

	if err := ioutil.WriteFile("./tree.json", jsonStr, 0644); err != nil {
		log.Fatalln(err)
	}

}

Generate a tree view

tree.json

{
 	"ID": 0,
 	"Name": "/",
 	"TopObj": null,
 	"Pid": 0,
 	"Child": [
 		{
 			"ID": 1,
 			"Name": "A",
 			"TopObj": {
 				"ID": 0,
 				"Name": "/",
 				"TopObj": null,
 				"Pid": 0,
 				"Child": null
 			},
 			"Pid": 0,
 			"Child": [
 				{
 					"ID": 2,
 					"Name": "b",
 					"TopObj": {
 						"ID": 0,
 						"Name": "A",
 						"TopObj": null,
 						"Pid": 0,
 						"Child": null
 					},
 					"Pid": 1,
 					"Child": null
 				}
 			]
 		},
 		{
 			"ID": 10,
 			"Name": "Q",
 			"TopObj": {
 				"ID": 0,
 				"Name": "/",
 				"TopObj": null,
 				"Pid": 0,
 				"Child": null
 			},
 			"Pid": 0,
 			"Child": null
 		},
 		{
 			"ID": 3,
 			"Name": "c",
 			"TopObj": {
 				"ID": 0,
 				"Name": "/",
 				"TopObj": null,
 				"Pid": 0,
 				"Child": null
 			},
 			"Pid": 0,
 			"Child": [
 				{
 					"ID": 4,
 					"Name": "d",
 					"TopObj": {
 						"ID": 0,
 						"Name": "c",
 						"TopObj": null,
 						"Pid": 0,
 						"Child": null
 					},
 					"Pid": 3,
 					"Child": [
 						{
 							"ID": 5,
 							"Name": "E",
 							"TopObj": {
 								"ID": 0,
 								"Name": "d",
 								"TopObj": null,
 								"Pid": 0,
 								"Child": null
 							},
 							"Pid": 4,
 							"Child": null
 						}
 					]
 				}
 			]
 		},
 		{
 			"ID": 11,
 			"Name": "aa",
 			"TopObj": {
 				"ID": 0,
 				"Name": "/",
 				"TopObj": null,
 				"Pid": 0,
 				"Child": null
 			},
 			"Pid": 0,
 			"Child": [
 				{
 					"ID": 12,
 					"Name": "BB",
 					"TopObj": {
 						"ID": 0,
 						"Name": "aa",
 						"TopObj": null,
 						"Pid": 0,
 						"Child": null
 					},
 					"Pid": 11,
 					"Child": [
 						{
 							"ID": 13,
 							"Name": "CC",
 							"TopObj": {
 								"ID": 0,
 								"Name": "BB",
 								"TopObj": null,
 								"Pid": 0,
 								"Child": null
 							},
 							"Pid": 12,
 							"Child": [
 								{
 									"ID": 14,
 									"Name": "DD",
 									"TopObj": {
 										"ID": 0,
 										"Name": "CC",
 										"TopObj": null,
 										"Pid": 0,
 										"Child": null
 									},
 									"Pid": 13,
 									"Child": null
 								}
 							]
 						}
 					]
 				}
 			]
 		}
 	]
 }

原网站

版权声明
本文为[Give me a bottle of ice cream]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/163/202206120259449042.html