jschepmans

jschepmans

Creating sublists in a for comprehension

Hello all,

I’m going through the open source beta version of the Dockyard Academy curriculum (GitHub - DockYard-Academy/curriculum · GitHub) and I’m doing some exercises about for comprehensions.

In one of these exercises I have to convert the following nested Enum.map into a comprehension with three generators:

Enum.map(1..3, fn a -> Enum.map(1..3, fn b -> {a, b} end) end)
# Result:
[[{1, 1}, {1, 2}, {1, 3}], [{2, 1}, {2, 2}, {2, 3}], [{3, 1}, {3, 2}, {3, 3}]]

My best guess has only two generators and results in one list without sublists:

for a <- 1..3, b <- 1..3, do: {a, b}
# Result:
[{1, 1}, {1, 2}, {1, 3}, {2, 1}, {2, 2}, {2, 3}, {3, 1}, {3, 2}, {3, 3}]

I assume the third generator (the one I am still missing) will create the 3 sublists. But I have no clue how this generator would look like. Any ideas?

Most Liked

stevensonmt

stevensonmt

I believe you need multiple comprehensions.

for a <- 1..3 do a end
|> IO.inspect
# [1,2,3]
for a <- 1..3, b <-1..3 do {a,b} end
|> IO.inspect
#[{1,1}, {1,2}, {1,3}, {2,1}, {2,2}, {2,3}, {3,1}, {3,2}, {3,3}]
for a <-1..3 do
  for b <- 1..3 do {a,b} end
end
|> IO.inspect
# [[{1,1}, {1,2}, {1,3}], [{2,1}, {2,2}, {2,3}], [{3,1}, {3,2}, {3,3}]]
gregvaughn

gregvaughn

I’m not sure whether to be proud or ashamed of myself :person_shrugging:

iex(40)> for x <- 1..3, row = (for y <- 1..3, do: {x,y}), z <- 1..3, x == z, do: row
[[{1, 1}, {1, 2}, {1, 3}], [{2, 1}, {2, 2}, {2, 3}], [{3, 1}, {3, 2}, {3, 3}]]
jschepmans

jschepmans

The wording was indeed incorrect - no specific amount of generators is needed to solve the exercise. It will be changed with a PR. Thanks everyone for your help!

Where Next?

Popular in Questions Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
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
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New

Other popular topics Top

JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" =&gt; #BSON.ObjectId&lt;58eb1a7a9ad169198c3dXXXX&gt;, "email" =&gt; ...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40165 209
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement