elixir - Create lists of list while creating a map -


i wrote

enum.reduce(list, map, fn elem, map ->   key=hd(elem)   map.put(map, key, list.wrap(map.get(map, key)) ++ tl(elem)) end) 

the list looks this

['b2', ['b1', 'b2', 'b3']], ['b2', ['a1', 'a2', 'a3']], 

and desired result looks like

b2 => [['b1', 'b2', 'b3'], ['a1', 'a2', 'a3']] 

the above code produce result feels exceptionally ugly.

i feel enum.into work nicer variant seems can't hold of values meanwhile. have tried

enum.into(list, map, fn [k, v] -> {k, list.wrap(map.get(map, k)) ++ v} end ) 

but doesn't produce useful. believe brain has hard time coming off imperative mindset have used in last quarter century of coding.

i'd use enum.reduce/3 well, instead of map.put/3 + list.wrap/1, i'd use map.update/4 , instead of hd/1 , tl/1 pattern matching.

list = [   ['a2', ['b1', 'b2', 'b3']],   ['a2', ['a1', 'a2', 'a3']],   ['b2', ['b1', 'b2', 'b3']],   ['b2', ['a1', 'a2', 'a3']], ]  list |> enum.reduce(%{}, fn [k | v], acc ->   map.update(acc, k, v, &(&1 ++ v)) end) |> io.inspect 

output:

%{'a2' => [['b1', 'b2', 'b3'], ['a1', 'a2', 'a3']],   'b2' => [['b1', 'b2', 'b3'], ['a1', 'a2', 'a3']]} 

Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -