arrays - Efficient way of flattening a recursive data structure in golang -


i have recursive data structure can contain few different type of data:

type data interface{  // methods } type pair struct { // implements data   fst data   snd data } type number float64 // implements data 

now want flatten chain of pairs []data. however, data in fst field should not flattened, data in snd should flattened. e.g:

chain := pair{number(1.0), pair{number(2.0), pair{number(3.0), nil}}} chain2 := pair{pair{number(1.0), number(4.0)}, pair{number(2.0), pair{number(3.0), nil}}} 

becomes:

data := []data{number(1.0), number(2.0), number(3.0)} data2 := []data{pair{number(1.0), number(4.0)}, number(2.0), number(3.0)} 

my naive approach be:

var data []data chain := pair{number(1.0), pair{number(2.0), pair{number(3.0), nil}}}  chain != nil {     data = append(data, chain.fst)     chain = chain.snd } 

is there more efficient approach can flatten data structure 1 in variable chain []data array?

you can use recursive function. on way down, add number of pairs, @ bottom, allocate array, , on way up, fill array front.

if need support arbitrary trees, can add size method data, , tree traversal fill array.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -