Как увеличить, регистр конкретной буквы в массиве Elixir
Может, для кого-то покажется глупый вопрос, но меня интересует как увеличить, не все буквы в массиве, а конкретную. Я попытался сделать свой код, но пока не удачно
x=["zoo", "sv", "xoo", "gis"]
z=Enum.map(x, fn item -> String.upcase(item[1]=item[1]) end)
IO.puts Enum.join(z, " ") Вот что хотел получить: `zOo sV xOo gIs`
Ответы (1 шт):
Автор решения: Alexandr Sysoev
→ Ссылка
String.upcase/2 не поддерживает подобные структуры в качестве параметра (Документация).
Одно из наивных решений может выглядеть так:
["zoo", "sv", "xoo", "gis"]
|> Enum.map(fn string ->
string
|> String.split("", trim: true)
|> List.update_at(1, &String.upcase/1)
|> Enum.join()
end)
Мы разбиваем каждую строчку на посимвольный лист, затем в каждом листе обновляем второй элемент и снова собираем лист в одну строчку.
Можно решить данную задачу изящнее, используя pattern matching
["zoo", "sv", "xoo", "gis"]
|> Enum.map(fn string ->
<<first_letter, second_letter>> <> tail = string
<<first_letter>> <> String.upcase(<<second_letter>>) <> tail
end)