我想循环显示表的名称,以添加由符号“ _
”定义的关联。
如果表a_b
和a
存在b
,则a = [b]
,b = [a]
。
最后,我不必打印名称中包含“ _
”的表
结构
// Table with Fields and Assoc
type Table struct {
Name string
Assoc []Assoc
}
// Assoc is a name of associated Table
type Assoc struct {
Name string
}
tables := []string{
"a",
"b",
"c",
"d",
"f",
"a_b",
"a_c",
"a_d_f",
"c_d",
}
var tbls []Table
for _, t := range tables {
if strings.Contains(t, "_") {
// Split to find "_" like assoc := strings.Split(t, "_") ?
// append in struct "Table{Name:a, Assoc: [b,c,d,f]}"
// append in struct "Table{Name:b, Assoc: [a]}"
// append in struct "Table{Name:c, Assoc: [a,d]}"
// append in struct "Table{Name:d, Assoc: [a,c,f]}"
// append in struct "Table{Name:f, Assoc: [a,d]}"
} else {
n := Table{
Name: t,
}
tbls = append(tbls, n)
}
}
像fmt.Println(tbls)
一样返回:
[{a [b,c,d,f]} {b [a]} {c [a,d]} {d [a,c,f]} {f [a,d]}]
答案 0 :(得分:0)
使用地图完成上述操作 https://play.golang.org/p/8C5M0L-es6o
package main
import (
"fmt"
"strings"
)
// Table with Fields and Assoc
type Table struct {
Name string
Assoc map[string]int
}
// Assoc is a name of associated Table
// type Assoc struct {
// Name string
// }
func main() {
tables := []string{
"a",
"b",
"c",
"d",
"f",
"a_b",
"a_c",
"a_d_f",
"c_d",
}
var tbls = make(map[string]map[string]int)
for _, t := range tables {
if strings.Contains(t, "_") {
splitAssocs := strings.Split(t, "_")
for i:=0;i<=len(splitAssocs)-2;i++ {
for j:=(i+1);j<=len(splitAssocs)-1;j++{
_, ok := tbls[splitAssocs[i]]
if !ok{
tbls[splitAssocs[i]] = make(map[string]int)
}
_, ok = tbls[splitAssocs[j]]
if !ok{
tbls[splitAssocs[j]] = make(map[string]int)
}
tbls[splitAssocs[i]][splitAssocs[j]] = 1
tbls[splitAssocs[j]][splitAssocs[i]] = 1
}
}
} else {
_, ok := tbls[t]
if !ok{
tbls[t] = make(map[string]int)
}
}
}
fmt.Println(tbls)
}