chmod777

chmod777

Need help with this nested list

I have the following list:


[
  :juridical_person_document,
  [re_developments: [[properties: [[re_development: [:re_developer]]]]]],
  :legal_address
]

And my desired output would be this:

[
  :juridical_person_document, 
  re_developments: [properties: [re_development: 
  [:re_developer]]],
  :legal_address
]

In other words, I want to remove the unnecessary square brackets. How can I achieve that?

Marked As Solved

chmod777

chmod777

@al2o3cr Indeed, this is not valid syntax. Thanks for letting me know.

@dimitarvp I discovered that Macro.postwalk(list, fn [[x]] -> [x]; x -> x end) works for this case. But you’re right about the fact that I should learn how to handle this, I will take some time to study recursion better.

Also Liked

dimitarvp

dimitarvp

Welcome to the forum.

As @al2o3cr points out, your desired output is not even legal syntax. But if you put the atoms in front and the lists at the bottom then it becomes legal:

[
  :juridical_person_document,
  :legal_address,
  re_developments: [properties: [re_development: [:re_developer]]]
]

Note that this is actually a short-hand / convenient form of:

[
  :juridical_person_document,
  :legal_address,
  {:re_developments, [properties: [re_development: [:re_developer]]]}
]

Your original problem is solveable if you can do a recursive visit function that converts double-nested lists – e.g. [ [elements, ...] ] – to normal lists (e.g. [elements, ...]).

We can give you the solution if you are truly stuck, no worries, but it’s usually a good idea for you to learn. So what have you tried?

Secondly, avoid the XY problem and let us know the original problem you are grappling with that led to this conundrum. Maybe we’ll be able to help better.

al2o3cr

al2o3cr

[
  :juridical_person_document, 
  re_developments: [properties: [re_development: [:re_developer]]],
  :legal_address
]

As a literal, this isn’t valid syntax and makes the compiler complain:

** (SyntaxError) iex:18:67: unexpected expression after keyword list. Keyword lists must always come last in lists and maps. Therefore, this is not allowed:

    [some: :value, :another]
    %{some: :value, another => value}

Instead, reorder it to be the last entry:

    [:another, some: :value]
    %{another => value, some: :value}

Syntax error after: ','
    |
 18 |   re_developments: [properties: [re_development: [:re_developer]]],
    |                                                                   ^

The closest you can get is:

[
  :juridical_person_document, 
  {:re_developments, [properties: [re_development: [:re_developer]]]},
  :legal_address
]

It’s certainly possible to remove the extra lists wrapped around some elements, but I’d start by looking into where this data comes from - specifically, why every keyword list seems to end up with an extra list wrapped around it.

Where Next?

Popular in Questions Top

Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

Other popular topics Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement