0

I have the following input:

[
  [
    {"title", "Aaaaaaaaa aaaaaaaaaaa aa aaa oaaaaaaaa"},
    {"title", "Aaaaaaa aa aaaa aaa.aa"},
    {"title", "Aaaaaaaaaaaa Aaaaaaa, aaa Aaaaaaa"},
    {"title", "Aaaa Aaaaaaaa aaaa Aaaaa"},
    {"title", "Aaaaaaa Aaaaaaa aaaa Aaaaa"},
    {"title", "Aaaaa Aaaaaaa aa Aaaaaa"},
    {"title", "Aaaaaaaaa Aaaaa Aaaa Aaaaaaa, Aaa Aaaaaaa"},
    {"title",
     "Aaaaaaaaa Aaaaaaa Aaaaaa aaaaaaaa Aaaaaaaaaaaaa aaa Aaaaaaaaaa Aaaaaa Aaaaaa Aaaaaaa"},
    {"title", "Aaaaaaaaaaaa Aaaaaaa"},
    {"title", "Aaaaaaaaa Aaaaa Aaaa Aaaa"}
  ],
  [
    {"url",
     "http://localhost:3000/aaaaaaaaa-aaaaaaaaaaa-aa-aaa-aaaaaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaa-aa-aaaa-aaa-aa/"},
    {"url", "http://localhost:3000/aaaaaaaaaaaa-aaaaaaa-aaa-aaaaaaa/"},
    {"url", "http://localhost:3000/aaaa-aaaaaaaa-aaaa-aaaaa/"},
    {"url", "http://localhost:3000/aaaaaaa-aaaaaaa-aaaa-aaaaa/"},
    {"url", "http://localhost:3000/aaaaa-aaaaaaa-aa-aaaaaa/"},
    {"url",
     "http://localhost:3000/aaaaaaaaa-aaaa-aaaa-aaaaaaa-aaa-aaaaaaa/"},
    {"url",
     "http://localhost:3000/aaaaaaaaa-aaaaaaa-aaaaaa-aa-aaa-aaaaaaaaaaaaa-aaa-aaaaaaaaaa-aaaaa-aaaaaa-aaaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaaaaaaa-aaaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaaaa-aaaaa-aaaa-aaaa/"}
  ]
]

and I start iex, and assign it to a variable, then perform a map of a count, like in this iex session:

Interactive Elixir (1.7.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> input = [
...(1)>   [
...(1)>     {"title", "Aaaaaaaaa aaaaaaaaaaa aa aaa oaaaaaaaa"},
...(1)>     {"title", "Aaaaaaa aa aaaa aaa.aa"},
...(1)>     {"title", "Aaaaaaaaaaaa Aaaaaaa, aaa Aaaaaaa"},
...(1)>     {"title", "Aaaa Aaaaaaaa aaaa Aaaaa"},
...(1)>     {"title", "Aaaaaaa Aaaaaaa aaaa Aaaaa"},
...(1)>     {"title", "Aaaaa Aaaaaaa aa Aaaaaa"},
...(1)>     {"title", "Aaaaaaaaa Aaaaa Aaaa Aaaaaaa, Aaa Aaaaaaa"},
...(1)>     {"title",
...(1)>      "Aaaaaaaaa Aaaaaaa Aaaaaa aaaaaaaa Aaaaaaaaaaaaa aaa Aaaaaaaaaa Aaaaaa Aaaaaa Aaaaaaa"},
...(1)>     {"title", "Aaaaaaaaaaaa Aaaaaaa"},
...(1)>     {"title", "Aaaaaaaaa Aaaaa Aaaa Aaaa"}
...(1)>   ],
...(1)>   [
...(1)>     {"url",
...(1)>      "http://localhost:3000/aaaaaaaaa-aaaaaaaaaaa-aa-aaa-aaaaaaaaa/"},
...(1)>     {"url", "http://localhost:3000/aaaaaaa-aa-aaaa-aaa-aa/"},
...(1)>     {"url", "http://localhost:3000/aaaaaaaaaaaa-aaaaaaa-aaa-aaaaaaa/"},
...(1)>     {"url", "http://localhost:3000/aaaa-aaaaaaaa-aaaa-aaaaa/"},
...(1)>     {"url", "http://localhost:3000/aaaaaaa-aaaaaaa-aaaa-aaaaa/"},
...(1)>     {"url", "http://localhost:3000/aaaaa-aaaaaaa-aa-aaaaaa/"},
...(1)>     {"url",
...(1)>      "http://localhost:3000/aaaaaaaaa-aaaa-aaaa-aaaaaaa-aaa-aaaaaaa/"},
...(1)>     {"url",
...(1)>      "http://localhost:3000/aaaaaaaaa-aaaaaaa-aaaaaa-aa-aaa-aaaaaaaaaaaaa-aaa-aaaaaaaaaa-aaaaa-aaaaaa-aaaaaaa/"},
...(1)>     {"url", "http://localhost:3000/aaaaaaaaaaaa-aaaaaaa/"},
...(1)>     {"url", "http://localhost:3000/aaaaaaaaa-aaaaa-aaaa-aaaa/"}
...(1)>   ]
...(1)> ]
[
  [
    {"title", "Aaaaaaaaa aaaaaaaaaaa aa aaa oaaaaaaaa"},
    {"title", "Aaaaaaa aa aaaa aaa.aa"},
    {"title", "Aaaaaaaaaaaa Aaaaaaa, aaa Aaaaaaa"},
    {"title", "Aaaa Aaaaaaaa aaaa Aaaaa"},
    {"title", "Aaaaaaa Aaaaaaa aaaa Aaaaa"},
    {"title", "Aaaaa Aaaaaaa aa Aaaaaa"},
    {"title", "Aaaaaaaaa Aaaaa Aaaa Aaaaaaa, Aaa Aaaaaaa"},
    {"title",
     "Aaaaaaaaa Aaaaaaa Aaaaaa aaaaaaaa Aaaaaaaaaaaaa aaa Aaaaaaaaaa Aaaaaa Aaaaaa Aaaaaaa"},
    {"title", "Aaaaaaaaaaaa Aaaaaaa"},
    {"title", "Aaaaaaaaa Aaaaa Aaaa Aaaa"}
  ],
  [
    {"url", "http://localhost:3000/aaaaaaaaa-aaaaaaaaaaa-aa-aaa-aaaaaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaa-aa-aaaa-aaa-aa/"},
    {"url", "http://localhost:3000/aaaaaaaaaaaa-aaaaaaa-aaa-aaaaaaa/"},
    {"url", "http://localhost:3000/aaaa-aaaaaaaa-aaaa-aaaaa/"},
    {"url", "http://localhost:3000/aaaaaaa-aaaaaaa-aaaa-aaaaa/"},
    {"url", "http://localhost:3000/aaaaa-aaaaaaa-aa-aaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaaaa-aaaa-aaaa-aaaaaaa-aaa-aaaaaaa/"},
    {"url",
     "http://localhost:3000/aaaaaaaaa-aaaaaaa-aaaaaa-aa-aaa-aaaaaaaaaaaaa-aaa-aaaaaaaaaa-aaaaa-aaaaaa-aaaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaaaaaaa-aaaaaaa/"},
    {"url", "http://localhost:3000/aaaaaaaaa-aaaaa-aaaa-aaaa/"}
  ]
]
iex(2)> input |> Enum.map(fn item -> Enum.count(item) end)
'\n\n'

It's not obvious why the above iex session does not return a list containing [10,10]. What am I doing wrong?

Thanks!

Geo
  • 93,257
  • 117
  • 344
  • 520
  • 1
    See https://stackoverflow.com/questions/30037914/elixir-lists-interpreted-as-char-lists. – Dogbert Sep 03 '18 at 16:51
  • @Dogbert, can I point out that there is a slight difference between the link you gave and the question @Geo asked ? it is not clearly mentioned in the answer that when you display something in iex, it is going to use the `IO.Inspect`. Therefore I see a small added value in this question. for example, you cannot use `charlists: :as_lists` directly in you iex – Nathan Ripert Sep 03 '18 at 16:59

1 Answers1

2

iex uses the protocol IO.Inspect, which sees the result as a charlist, hence the \n\n. If you use this line:

iex> input |> Enum.map(fn item -> Enum.count(item) end) |> hd |> to_string |> String.to_integer

you will get:

iex> 10

it is the same issue that you have when you display this list:

iex> list = [7,8,9]
'\a\b\t'

Solution: you can add a number such as 0 into your map, to force the result to appear as list of number:

iex> [0] ++ (input |> Enum.map(fn item -> Enum.count(item) end))
[0,10,10]

This topic has already been discussed here

Nathan Ripert
  • 872
  • 1
  • 7
  • 18