1. 程式人生 > 其它 >golang 無限極樹的結構化返回

golang 無限極樹的結構化返回

從一篇部落格上學習到的方式。作用於樹狀資料處理返回,很巧妙,學習到了,記錄下來。

實現思路

  1.獲取所有資料list
  2.遍歷所有資料list,轉換為map。以唯一ID為key
  3.遍歷所有資料list,(這裡繼續用list,是為了保證按照順序輸出)
  4.遍歷中,取所有的父級ID。定義為一級子集。
  5.遍歷中,如果存在父級ID。追加到父級的子集中。

程式碼示例

  

---------處理程式碼------------- 
       list,total := 查詢的全部資料
	treeMap := make(map[string]*treeItem, total)
	for _, v := range list {
		treeMap[v.FileId] = &treeItem{
			FileId:   v.FileId,
			FileName: v.FileName,
			ParentId: v.ParentId,
			Children: []*treeItem{},
		}
	}

	treeData := make([]*treeItem, 0, total) //全部的樹狀資料
	for _, v := range list {
		if v.ParentId == "" || v.ParentId == "0" {
			treeData = append(treeData, treeMap[v.FileId])
			continue
		}
		if vv, ok := treeMap[v.ParentId]; ok {
			vv.Children = append(vv.Children, treeMap[v.FileId])
		}
	}

---------處理程式碼------------- 

type treeItem struct {
	FileId   string      `json:"file_id"`
	FileName string      `json:"file_name"`
	ParentId string      `json:"parent_id"`
	Children []*treeItem `json:"children"`
}

  

treeData就是處理後的資料,僅供參考