在Golang中创建多维嵌套地图切片 太长,读不下去了这就像将子类别的值存储为数组中父id的索引一样。请参阅块末尾的等效PHP代码。
我需要存储在Golang中创建多维嵌套地图切片 太长,读不下去了这就像将子类别的值存储为数组中父id的索引一样。请参阅块末尾的等效PHP代码。,go,Go,我需要存储dad-childrennumber的值。有多个父亲,每个父亲都有多个女儿。有些父亲可能也没有女儿。因此,我需要将价值存储为:- variableName[DadID][indexFrom0ToAvailableValue] = {"id": id, "name": name} 其中,indexFrom0toAvailableValue是子项及其id和名称的索引 我在做什么:- patu := make(map[int][]map[string]string) p,n := 0,0
dad-children
number的值。有多个父亲,每个父亲都有多个女儿。有些父亲可能也没有女儿。因此,我需要将价值存储为:-
variableName[DadID][indexFrom0ToAvailableValue] = {"id": id, "name": name}
其中,indexFrom0toAvailableValue
是子项及其id
和名称的索引
我在做什么:-
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个父ID和49行
所以,你可以看到,有很多空白地图[]。它们会被创造出来。我需要清理一下。在存储子详细信息之前,先创建4个空白映射。因此,女儿的详细信息将存储在第五张地图中。我假设如果会有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);
}
}
}
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})
你应该试着想出一个简单易懂且自包含的例子。@volker,我在代码末尾也添加了等效的PHP代码,这对我的例子很有效。@volker,这就像在数组中将子类别的值存储为父id的索引。哇!这有多简单,append
我怎么能忽略这一点。谢谢@dev.bmax