Как сделать вывод значения ключа - PullRequest
0 голосов
/ 04 апреля 2019

Я работаю над решением, я хочу добавить числа, например, 101, результаты к 1 + 0 + 1 = 2, и я хочу вывести его как 101, 2.

У меня есть массив, так что он работает не совсем правильно, вот мой код:

numbers = Enum.map(array, fn i -> String.to_integer(i) end)

# Get the sum of the numbers
sum = Enum.map(numbers, fn i -> Integer.digits(i) |> Enum.sum() end)

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Если вы хотите получить как число, так и сумму его цифр, вы должны вернуть кортеж или список в функции отображения, например:

sum = Enum.map(nums, fn i -> {i, Integer.digits(i) |> Enum.sum()} end)

Теперь, учитывая список строк, таких как ["101", "202"], sum будет равен [{101, 2}, {202, 4}].

0 голосов
/ 04 апреля 2019

TGO предоставил правильное решение, я просто хотел указать, что вы можете объединить операции вместе для более чистой функции, и если вы используете Stream вместо Enum для первой карты, список будет только лениво перечислил один раз. Вы запросили вывод значения ключа, поэтому я выбрал карту вместо кортежа.

def sum_digits(list) do
  list
  |> Stream.map(&String.to_integer/1)
  |> Enum.map(fn i -> %{i => i |> Integer.digits() |> Enum.sum()} end)
end

Пример:

iex> Example.sum_digits(["101", "123"])
[%{101 => 2}, %{123 => 6}]
...