Menukarkan Struktur Laluan menjadi Pokok
Membangun struktur data bersarang daripada koleksi rentetan laluan boleh menimbulkan cabaran, terutamanya apabila berurusan dengan petunjuk dan rekursi. Mari kita siasat penyelesaian untuk mencipta pepohon hierarki daripada tatasusunan struktur laluan.
Pertimbangkan contoh berikut:
s:=[]string { "a/b/c", "a/b/g", "a/d" }
Matlamat kami adalah untuk membina pepohon yang menyerupai struktur JSON berikut:
{ "name": "a", "children": [ { "name": "b", "children": [ { "name": "c", "children": [] }, { "name": "g", "children": [] } ] }, { "name": "d", "children": [] } ] }
Untuk mencapai matlamat ini, kami melaksanakan fungsi rekursif yang dipanggil AddToTree yang mengambil pepohon sedia ada dan senarai segmen laluan.
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 }
Fungsi ini merentasi pepohon sedia ada untuk menentukan sama ada nod yang ditentukan sudah wujud. Jika ia berlaku, ia meneruskan ke segmen laluan seterusnya. Jika tidak, ia mencipta nod baharu dengan nama yang ditentukan dan menambahkannya pada pepohon sedia ada.
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" }] }]
Penyelesaian kami berbeza daripada pendekatan asal dalam aspek utama berikut:
Atas ialah kandungan terperinci Bagaimana untuk Membina Struktur Pokok Hierarki daripada Senarai Rentetan Laluan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!