【发布时间】:2017-07-26 15:43:38
【问题描述】:
TLDR;这就像将子类别的值存储为数组中父 ID 的索引。请参阅块末尾的等效 PHP 代码。
我需要存储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 Total Number of Rows。
所以,你可以看到,有很多空白 map[] 。哪个被创建。我需要清理这个。在存储女儿详细信息之前,每个前 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);
}
}
}
【问题讨论】:
-
您应该尝试提出可理解且独立的示例。
-
@volker ,我也添加了等效的 PHP 代码,它在代码末尾适用于我的示例。
-
@volker ,就像将子类别的值存储为数组中父ID的索引一样。
标签: go