lc0815

lc0815

I have a need to extract the individual items from an Enum.reduce function but I get is the single value from the acc.

Here is the sample code:

defmodule Demo do
  def add_sequence_number(business_card) do

    business_card
        |> String.split("\n")
        |> Enum.reduce(1, fn (x, acc) -> IO.inspect "#{acc}$#$#{x}"; acc + 1 end)

  end
end

business_card = """
Bruce Waine,Batman
Bat cave
Gotham City, NY 12345
987.123.5984

Gotham Security Services Co
Crime fighter
Wonder Woman
"""

new_card = Demo.add_sequence_number(business_card)

IO. puts "\nthis is the result:  #{new_card}\n"

here is a screen shot of the result:

what I need is the array from the inner reduce function but I am getting is the result of 10 and I need to access the list as in the image.

any tips, thank you

Showing Posts 1 to 10

kip

kip

ex_cldr Core Team

Whatever the function returns become acc on the next iteration. And whatever acc is at the end is returned by Enum.reduce/3. Therefore you will be accumulating a list of results in many common cases, including this one.

Think more along the lines of:

{count, results} =
  Enum.reduce(cards, {0, []}, fn (x, {seq, acc) ->
    seq = seq + 1
    {seq, "#{seq}$#$#{x}"}
  end)
dimitarvp

dimitarvp

You don’t exactly need Enum.reduce then, you likely need Enum.with_index plus Enum.map, but it can be done with Enum.reduce by using a tuple accumulator as @kip showed you.

lc0815

lc0815 OP

thanks kip, will try that…

lc0815

lc0815 OP

thanku dimitarvp working on kip’s suggestion. I’m trying to wrap my head around the reduce function…

thanks again

lud

lud

Also Enum.map_reduce !

lc0815

lc0815 OP

thanks lud, that was the answer…

eksperimental

eksperimental

also list comprehensions, (for)

al2o3cr

al2o3cr

A helpful way to think about these situations is to think about the types.

Enum.reduce expects a function of type (element, accumulator) -> accumulator and returns a result of type accumulator.

Enum.scan expects a function of type (element, accumulator) -> accumulator and returns a result of type [accumulator], so it’s worth considering if you’re expecting a list of results.

A good example for comparing the two is with lists of integers:

numbers = [1, 2, 3, 4]

Enum.reduce(numbers, 0, fn n, acc ->
  n + acc
end)
# returns the TOTAL: 10

Enum.scan(numbers, 0, fn n, acc ->
  n + acc
end)
# returns the list of SUBTOTALS: [1, 3, 6, 10]

In your example, using binaries (like "1$#$Bruce Waine, Batman") as an accumulator type is less than ideal. A better intermediate format would be a tuple like {1, "Bruce Waine, Batman"}, resulting in code like:

business_card
|> String.split("\n")
|> Enum.scan({0, ""}, fn line, {acc_number, _} ->
  {acc_number+1, line}
end)
|> Enum.map(fn {n, line} ->
  "#{n}$#$#{line}
end)
lc0815

lc0815 OP

@al2o3cr thanks Matt great explanation, I’m starting from scratch again. this little exercise was to practice pattern matching using a sample business card and reformat two sections the personal profile and the company profile. so much for easy examples…

thanks for you help, I guess I have to go back and ready all of the Enums, Maps and related docs… it never ends…

lc0815

lc0815 OP

thanku more reading… LoL

Where Next? Top

Trending in Questions Top

water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews