Как удалить «любой» элемент списка в эликсире - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть список списков

>> list = [[1,""],[2,"b"],[3,""],[4,"c"]]

Я хочу удалить списки, которые содержат элемент ""

>>list = [[2,"b"],[4,"c"]]

Я пытаюсь найти что-то вроде

list = List.delete(list,[any,""])

1 Ответ

3 голосов
/ 19 сентября 2019

Вы можете объединить Enum.reject/2 с Enum.member?/2 и отклонить любой список, содержащий пустую строку

iex> Enum.reject([[1,""],[2,"b"],[3,""],[4,"c"]], &Enum.member?(&1, ""))
[[2, "b"], [4, "c"]]

Если ваши внутренние списки всегда одинаковыдвухэлементный стиль, и вы хотите проверить только второй элемент, вы также можете использовать анонимную функцию

iex> Enum.reject([[1,""],[2,"b"],[3,""],[4,"c"]], fn [_, b] -> b == "" end)
[[2, "b"], [4, "c"]]

или понимание, которое делает то же самое

iex> for [a, b] when b != "" <- [[1,""],[2,"b"],[3,""],[4,"c"]], do: [a, b]
[[2, "b"], [4, "c"]]
...