我需要存储dad-daughter
个数字的值。有多个人是父亲,每个父亲有多个女儿。有些父亲可能也没有女儿。所以,我需要将价值存储为: -
variableName[DadID][indexFrom0ToAvailableValue] = {"id": id, "name": name}
其中indexFrom0toAvailableValue
是女儿及其id
和name
的编号索引。
我在做什么: -
patu := make(map[int][]map[string]string)
p,n := 0,0
for _,c := range dadhu {
// c.Daughter of value 2 means, current c is father
if( c.Daughter == 2 ) {
// Below i am using len(daddhu) to know
// number of rows available. This is creating another bug
// as it is creating lots of blank map.
patu[c.DadID] = make([]map[string]string, len(dadhu))
// Created array `patu` with `DadID` which will store
// their children below for range loop in above array
p++
}
}
fmt.Println("Total Father is : ", p)
for _,c := range dadhu {
// c.Daughter of value 1 means, current c is daughter
if ( c.Daughter == 1 ) {
cID = strconv.Itoa(c.ID)
patu[c.DadID][n] = map[string]string{"id": cID, "name" : c.Name}
n++
}
}
这很好用,但我的问题是,它正在创建如下地图: -
map[44:[map[] map[] map[] map[] map[id: 45 name:Lana] map[] map[] map[] map[] map[id:46 name:Mana] map[] map[] map[] map[] map[id: 47 name:Bana].........] 28:[[map[] map[] map[] map[] map[id: 29 name:Lana] map[] map[] map[] map[] map[id:30 name:Mana] map[] map[] map[] map[] map[id: 31 name:Bana]........map[] map[] map[] map[]]]
等等。
mysql中共有5个Parent ID和49个总行数。
所以,你可以看到,有很多空白地图[]。哪个被创造了。我需要清理它。在存储女儿细节之前,每个前4个空白地图。因此,女儿的细节将存储在第5张地图中。我假设如果有7个人是父亲,那么从4个空白地图可能会变成6个空白地图。
我在这里找不到任何逻辑错误,除了我正在使用len(dadhu)
因为我需要提供一些价值,但我不确定,哪位父亲有多少女儿。
如果在golang
中出现各种问题,请告诉我替代方法。
仅供参考:它在PHP中的等效代码 - 工作正常是:
$patu = array();
$wod = array();
foreach ($dadhu as $e) {
if ($e->isChild == '2') {
$woc[] = $e->id;
$patu[$e->id] = array();
}
}
foreach($dadhu as $c) {
if($c->isChild == '1') {
if(in_array($c->dadID, $wod)) {
$patu[$c->dadID][] = array($c->id, $c->name);
}
}
}
答案 0 :(得分:4)
Go中的切片是动态调整大小的,你不应该像对待数组一样对待它们。
在第一个循环中,如果您不知道确切的大小,请不要使用len(dadhu)
初始化切片。
相反,制作一个空切片:
patu[c.DadID] = make([]map[string]string, 0)
在第二个循环中,将地图附加到它:
patu[c.DadID] = append(patu[c.DadID], map[string]string{"id": cID, "name": c.Name})