Elixir List of Tuples to List of Strings

Я хочу взять

[{'O', 'L'}, {'E', 'L'}, {'O', 'H'}, {'E', 'L'}, {'E', 'H'}]
and change it to
["OL", "EL", "OH", "EL", "EH"]
but I am not seeing how. Help?
[JS за 1 час] - 9. Асинхронный
[JS за 1 час] - 9. Асинхронный
JavaScript является однопоточным, то есть он может обрабатывать только одну задачу за раз. Для обработки длительных задач, таких как сетевые запросы,...
Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP
Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.
Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python
📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что...
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
Подъем в javascript
Подъем в javascript
Hoisting - это поведение в JavaScript, при котором переменные и объявления функций автоматически "перемещаются" в верхнюю часть соответствующих...
Улучшение генерации файлов Angular
Улучшение генерации файлов Angular
Angular - это фреймворк. Вы можете создать практически любое приложение без использования сторонних библиотек.
2
0
68
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Может быть так:

Enum.map(my_list, fn {a, b} -> List.to_string([a, b]) end)

Использование понимания for и интерполяции строк:

iex(1)> list = [{'O', 'L'}, {'E', 'L'}, {'O', 'H'}, {'E', 'L'}, {'E', 'H'}]
[{'O', 'L'}, {'E', 'L'}, {'O', 'H'}, {'E', 'L'}, {'E', 'H'}]
iex(2)> for {a, b} <- list, do: "#{a}#{b}"
["OL", "EL", "OH", "EL", "EH"]

Помните, что в Эликсире одинарные кавычки обозначают списки символов, поэтому 'O' != "O". Таким образом, решение вашего вопроса будет выглядеть по-разному в зависимости от того, используете ли вы одинарные кавычки (т.е. списки символов) в своих кортежах (как вы написали) или если у вас есть строки с двойными кавычками, например. [{"O", "L"}, ...]

Если вы хотите вывести списки символов, вы можете преобразовать кортежи в список, а затем соединить списки с помощью ++. Это работает, потому что 'O' и 'L' сами по себе являются списками.

iex> l = [{'O', 'L'}, {'E', 'L'}, {'O', 'H'}, {'E', 'L'}, {'E', 'H'}]
iex(5)> Enum.map(l, &Tuple.to_list/1) |> Enum.map(fn [x, y] -> x ++ y end)
['OL', 'EL', 'OH', 'EL', 'EH']

Если вы имеете дело со строками с самого начала и намеревались начать со строк в двойных кавычках, вы можете присоединиться к списку символов, используя Enum.join/2:

iex> l = [{"O", "L"}, {"E", "L"}, {"O", "H"}, {"E", "L"}, {"E", "H"}]
iex> Enum.map(l, &Tuple.to_list/1) |> Enum.map(fn chars -> Enum.join(chars) end)
["OL", "EL", "OH", "EL", "EH"]

Если вам нужно решить это точно так, как написано, вы можете добавить to_string/1 к своей конверсии:

iex> l = [{'O', 'L'}, {'E', 'L'}, {'O', 'H'}, {'E', 'L'}, {'E', 'H'}]
iex> Enum.map(l, &Tuple.to_list/1) |> Enum.map(fn [x, y] -> x ++ y |> to_string() end)
["OL", "EL", "OH", "EL", "EH"]

Ознакомьтесь с другими ответами для более элегантных/кратких преобразований.

Вы можете сделать это кратко, используя включения и оператор <<>>.

for {[a], [b]} <- list, do: <<a::utf8, b::utf8>>

Обратите внимание, что синтаксис 'A' представляет собой список символов, эквивалентный списку кодовых точек Unicode. Вы можете использовать извлеченную кодовую точку с опцией utf8 для оператора <<>> для построения соответствующей строки.

Другие вопросы по теме