Hello, I want to create the loop of 4 numbers like this:
1 Purple
2 Blue
3 Orange
4 Green
these 4 numbers should be repeated again in my for loop
<%= for el <- posts_entries do %>
<%= el["title"] %>
<%= the_number_which_I_need %>
<% end %>
For example, In repeating the fifth number, I want to repeat the purple color again and 6 is been Blue and …
How do I do this ?
Stream.cycle([1,2,3,4]) |> Enum.take(10)
Thank you, I have 2 questions:
- how do I use this in my code, I need it to be printed a number in my code each loop, like this:
- the_number_which_I_need = 1
- the_number_which_I_need = 2
- the_number_which_I_need = 3
- the_number_which_I_need = 4
- the_number_which_I_need = 1
<%= for el <- posts_entries do %>
<%= el["title"] %>
<%= the_number_which_I_need %>
<% end %>
- is there a way to create this in a function?
NobbZ
4
-
Enum
and Stream
are your friends and loaded with a bunch of functions that can help you with this:
iex(1)> [:a, :b, :c, :d] |> Enum.with_index() |> Enum.map(fn {label, idx} -> {label, idx + 1} end) |> Stream.cycle() |> Stream.map(fn {label, nr} -> IO.puts "#{nr}: #{label}" end) |> Enum.take(10)
1: a
2: b
3: c
4: d
1: a
2: b
3: c
4: d
1: a
2: b
[:ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok]
- Of course, just wrap it in a
def
, I leave this to your homework.
2 Likes
Oh, sure. You can use Enum.zip
which returns list of tuples:
posts_entries = ["a", "b", "c", "d", "e", "f", "g"]
colors = Stream.cycle(["purple", "red", "orange"])
for {el, color} <- Enum.zip(posts_entries, colors) do
IO.puts("#{el} (#{color})")
end
I’m not sure what you mean exactly, but would something like this work?
def colored_posts(posts, colors) do
Enum.zip(posts, Stream.cycle(colors))
end
2 Likes