Comment diviser une liste par mot-clé dans Elixir

Thomas Browne

Disons que j'ai une liste de mots, où un mot-clé, dans ce cas "stop", délimite des phrases complètes:

["Hello", "from", "Paris", "stop", "Weather", "is", "sunny", "stop", "Missing", "you", "stop"]

que je veux transformer en:

[["Hello", "from", "Paris"], ["Weather", "is", "sunny"], ["Missing", "you"]]

Je sais que je peux faire cela avec des chaînes avec String.split, mais idéalement, j'aimerais apprendre à résoudre le problème ci-dessus avec des constructions fonctionnelles fondamentales, telles que la récursivité sur [head | tail], etc., mais je ne peux pas savoir où commencer à accumuler des listes intermédiaires.

Dogbert

Voici une implémentation récursive de queue simple utilisant la correspondance de modèles:

defmodule Main do
  def split_on(list, on) do
    list
    |> Enum.reverse
    |> do_split_on(on, [[]])
    |> Enum.reject(fn list -> list == [] end)
  end

  def do_split_on([], _, acc), do: acc
  def do_split_on([h | t], h, acc), do: do_split_on(t, h, [[] | acc])
  def do_split_on([h | t], on, [h2 | t2]), do: do_split_on(t, on, [[h | h2] | t2])

  def main do
    ["Hello", "from", "Paris", "stop", "Weather", "is", "sunny", "stop", "Missing", "you", "stop"]
    |> split_on("stop")
    |> IO.inspect
  end
end

Main.main

Production:

[["Hello", "from", "Paris"], ["Weather", "is", "sunny"], ["Missing", "you"]]

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Comment diviser par le changement dans une liste Y?

Comment diviser une liste par son élément dans Scala

Comment regrouper et diviser des éléments dans une liste par code en ligne?

mot-clé python self dans une liste

Comment vérifier si un mot est dans une liste qui est une clé d'un dictionnaire?

Comment diviser une liste / un tableau par un autre?

Comment définir la valeur par défaut pour un paramètre de liste facultatif dans un mot clé

Python3 - Comment rechercher une clé par valeurs dans une liste de dictionnaires?

Elixir: Comment filtrer une carte par clés

Comment trier une liste dans hashmap par éléments de la même clé

Comment diviser une longue liste en morceaux dans Qore

Comment Zlib gonfler une liste d'octets dans Elixir?

Trier une clé, liste de valeurs dans R par valeur

Python supprime le dictionnaire dans une liste par clé

Comment inverser une phrase mot par mot?

comment diviser une chaîne sans caractères spéciaux, majuscules ou nombres dans un mot

Comment inverser une chaîne dans une colonne mot par mot?

Comment diviser une liste imbriquée dans une colonne Pandas Dataframe verticalement, c'est-à-dire en lignes séparées

Dans Elixir, comment puis-je diviser une chaîne avec des caractères non-mot sont des séparateurs, mais aussi autoriser des opérateurs mathématiques comme +, -, etc.?

Comment diviser une data.table par une autre dans R, par colonne?

Comment diviser une liste dans une colonne en deux colonnes dans un dataframe en utilisant python?

Comment additionner les valeurs et les regrouper par une valeur clé dans la liste des cartes de Scala?

Comment retirer un mot d'une liste séparée par ":"?

Comment effectuer une recherche par mot-clé en texte intégral

Comment diviser une liste de vecteurs en petites listes par ordre décroissant en r

Comment diviser une liste en deux listes par des positions paires et impaires?

Comment diviser les valeurs d'une liste par parenthèses à l'aide de regex en Python?

Comment activer l'insertion du mot clé ByVal par défaut dans Visual Studio 2015?

Comment diviser une liste de tableaux?