Наведите порядок в списках эликсиров: удаление пустых строк стало проще!

В Elixir списки — это фундаментальная структура данных, которая позволяет нам хранить коллекции элементов и манипулировать ими. Однако иногда эти списки содержат пустые строки, которые могут загромождать наш код и усложнять работу с ним. В этой статье мы рассмотрим несколько методов удаления пустых строк из списков, что сделает наш код более чистым и управляемым. Итак, приступим!

Метод 1: использование Enum.reject/2
Первый метод, который мы рассмотрим, — использование функции Enum.reject/2. Эта функция принимает список и предикат в качестве аргументов и возвращает новый список, исключающий все элементы, для которых предикат возвращает true. В нашем случае предикатом будет функция, проверяющая, является ли элемент пустой строкой или нет.

list = ["", "Hello", "", "World", ""]
filtered_list = Enum.reject(list, &(&1 == ""))
IO.inspect(filtered_list)

Выход:

["Hello", "World"]

Метод 2: использование генераторов списков
Elixir предоставляет мощные генераторы списков, которые позволяют нам выполнять преобразования списков. Мы можем использовать генераторы списков, чтобы легко отфильтровывать пустые строки из нашего списка.

list = ["", "Hello", "", "World", ""]
filtered_list = [element || element <- list, element != ""]
IO.inspect(filtered_list)

Выход:

["Hello", "World"]

Метод 3: сопоставление с образцом и рекурсия
Другой подход заключается в использовании сопоставления с образцом и рекурсии для обхода списка и удаления пустых строк. Мы можем определить рекурсивную функцию, которая сопоставляет начало и конец списка, и если заголовок не является пустой строкой, мы включаем ее в результат.

defmodule ListUtils do
  def remove_empty_strings([]), do: []
  def remove_empty_strings([head | tail]) when head == "", do: remove_empty_strings(tail)
  def remove_empty_strings([head | tail]), do: [head | remove_empty_strings(tail)]
end
list = ["", "Hello", "", "World", ""]
filtered_list = ListUtils.remove_empty_strings(list)
IO.inspect(filtered_list)

Выход:

["Hello", "World"]

В этой статье мы рассмотрели три различных метода удаления пустых строк из списков в Elixir. Предпочитаете ли вы простоту Enum.reject/2, элегантность списков или гибкость сопоставления с образцом и рекурсии, теперь у вас есть несколько подходов на выбор. Применяя эти методы, вы сможете сохранить свой код чистым и кратким, что упростит работу со списками в Elixir.