경로 구조를 트리로 변환
경로 문자열 모음에서 중첩된 데이터 구조를 개발하는 것은 특히 문제를 다룰 때 어려울 수 있습니다. 포인터와 재귀. 경로 구조 배열에서 계층적 트리를 생성하는 솔루션을 조사해 보겠습니다.
다음 예를 고려하세요.
s:=[]string { "a/b/c", "a/b/g", "a/d" }
우리의 목표는 다음 JSON 구조와 유사한 트리를 구성하는 것입니다.
{ "name": "a", "children": [ { "name": "b", "children": [ { "name": "c", "children": [] }, { "name": "g", "children": [] } ] }, { "name": "d", "children": [] } ] }
이를 달성하기 위해 기존 트리와 경로 세그먼트 목록을 사용하는 AddToTree라는 재귀 함수를 구현합니다.
func AddToTree(root []Node, names []string) []Node { if len(names) > 0 { var i int for i = 0; i < len(root); i++ { if root[i].Name == names[0] { //already in tree break } } if i == len(root) { root = append(root, Node{Name: names[0]}) } root[i].Children = AddToTree(root[i].Children, names[1:]) } return root }
이 함수는 기존 트리를 탐색하여 지정된 노드가 이미 존재합니다. 그렇다면 경로의 다음 세그먼트로 진행됩니다. 그렇지 않으면 지정된 이름으로 새 노드를 생성하여 기존 트리에 추가합니다.
Example output (note that I used omitempty on the children field, because I don't like null entries in my JSONs): [{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
저희 솔루션은 다음과 같은 주요 측면에서 원래 접근 방식과 다릅니다.
위 내용은 경로 문자열 목록에서 계층적 트리 구조를 구축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!