go - Creating Multi dimensional Nested Map slice in Golang -
tldr; it's storing value of child category index of parent id in array. see equivalent php code @ end of block.
i need store value of dad-daughter number. there multiple person father , each father has multiple daughter. father may not have daughter either.so, need store value :-
variablename[dadid][indexfrom0toavailablevalue] = {"id": id, "name": name} where indexfrom0toavailablevalue index of number of daughter , id , name.
what doing :-
patu := make(map[int][]map[string]string)  p,n := 0,0  _,c := range  dadhu {     // c.daughter of value 2 means, current c father     if( c.daughter == 2 ) {          // below using len(daddhu) know         // number of rows available. creating bug         // creating lots of blank map.          patu[c.dadid] = make([]map[string]string, len(dadhu))          // created array `patu` `dadid` store          // children below range loop in above array          p++     } } fmt.println("total father : ", p)  _,c := range dadhu {     // c.daughter of value 1 means, current c daughter      if ( c.daughter == 1 ) {         cid = strconv.itoa(c.id)         patu[c.dadid][n] = map[string]string{"id": cid, "name" : c.name}         n++     } } this working fine, problem is, creating map below :-
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[]]]  and on.
there total 5 parent id , 49 total number of rows in mysql.
so, can see, there lots of blank map[] . created. need clean up. first 4 blank map each before storing daughter details. daughter details getting stored in 5th map . assuming if there 7 person father, 4 blank map may become 6 blank map each.
i not finding logical mistake here except 1 using len(dadhu) need provide value not sure, father has how many daughter. 
please let me know alternate way this, if wrong in ways in golang.
just fyi : it's equivalent code in php - working fine :
$patu = array(); $wod = array(); foreach ($dadhu $e) {     if ($e->ischild == '2') {         $woc[] = $e->id;         $patu[$e->id] = array();     } } foreach($dadhu $c) {     if($c->ischild == '1') {             if(in_array($c->dadid, $wod)) {                 $patu[$c->dadid][] = array($c->id, $c->name);             }         }     } 
slices in go dynamically-sized, shouldn't treat them arrays.
in first loop don't use len(dadhu) initialize slice if don't know exact size. 
instead, make empty slice:
patu[c.dadid] = make([]map[string]string, 0) in second loop, append maps it:
patu[c.dadid] = append(patu[c.dadid], map[string]string{"id": cid, "name": c.name}) 
Comments
Post a Comment