tx面试题目
package main
import (
"fmt"
"math/rand"
"time"
)
type Option struct {
ID string json:"id"
Text string json:"text"
}
type Question struct {
Title string json:"title"
RelateBY string json:"relateBY,omitempty"
Options []Option json:"options"
}
type treeStruct struct {
id int
name string
children []treeStruct
}
var (
subjecy [][]string
)
func main() {
var questions = map[string]Question{
"gwc1": {
Title: "多选题",
Options: []Option{
{ID: "1", Text: "多选题2"},
{ID: "2", Text: "多选题3"},
{ID: "3", Text: "多选题4"},
},
},
"plc8": {
RelateBY: "gwc1",
Title: "单选题",
Options: []Option{
{ID: "4", Text: "单选题2"},
{ID: "5", Text: "单选题3"},
{ID: "6", Text: "单选题4"},
},
},
"xkeb": {
RelateBY: "plc8",
Title: "下拉题",
Options: []Option{
{ID: "7", Text: "下拉选项2"},
{ID: "8", Text: "下拉选项3"},
{ID: "9", Text: "下拉选项4"},
},
},
}
newArr := getAllOptions(questions, "xkeb")
// fmt.Printf("%+v\n", questions)
fmt.Println(newArr)
subjecy = [][]string{
{"a", "甲", "1"},
{"a", "甲", "2"},
{"a", "乙", "3"},
{"a", "乙", "4"},
{"a", "丙", "5"},
{"b", "丁", "6"},
{"b", "丁", "7"},
}
newsubjecy := genCascadeTree(subjecy)
// fmt.Println(newsubjecy)
fmt.Printf("%+v\n", newsubjecy)
}
func getAllOptions(arr map[string]Question, id string) []string {
var list []string
if _, ok := arr[id]; ok {
for _, val := range arr[id].Options {
list = append(list, val.Text)
}
list = append(list, getAllOptions(arr, arr[id].RelateBY)...)
}
return list
}
func genCascadeTree(arr [][]string) map[string]treeStruct {
tree := map[string]treeStruct{}
rand.Seed(time.Now().UnixNano())
for _, v := range arr {
if _, ok := tree[v[0]]; !ok {
tree[v[0]] = treeStruct{
id: rand.Intn(100) + 100,
name: v[0],
children: []treeStruct{},
}
}
found := false
for kk, vv := range tree[v[0]].children {
if vv.name == v[1] {
found = true
tree[v[0]].children[kk].children = append(tree[v[0]].children[kk].children, treeStruct{
name: v[2],
id: rand.Intn(100) + 100,
})
}
}
if !found {
tmp := tree[v[0]]
tmp.children = append(tmp.children, treeStruct{
name: v[1],
id: rand.Intn(100) + 100,
children: []treeStruct{treeStruct{
name: v[2],
id: rand.Intn(100) + 100,
}},
})
tree[v[0]] = tmp
}
}
return tree
}