Dans la manipulation de la liste fonctionnelle, Qu'appelez-nous « insérer quelque chose entre chaque élément »?

StackOverflow https://stackoverflow.com/questions/1158573

Question

De temps en temps, je trouve que je dois traiter une liste en insérant un nouvel élément après chaque élément, sauf le dernier. Semblable à la façon dont vous pouvez mettre une virgule entre chaque élément d'une liste de chaînes.

J'ai eu marre de coder le cas particulier pour la dernière (ou première) point à chaque fois, donc je saisis le modèle dans une extension de style Linq:

public static IEnumerable<T> Separate<T>(this IEnumerable<T> source, 
                                         Func<T> separator)
{
    bool first = true;
    foreach (T item in source)
    {
        if (first)
            first = false;
        else
            yield return separator();

        yield return item;
    }
}

Par exemple, cela me permet de facilement remplir un document programatically de flux avec des hyperliens, mais avec une ligne de rupture entre chacun:

para.Inlines.AddRange(_recentFiles.Select(f => f.ToHyperlink())
                                  .Separate(() => new LineBreak()));

En supposant que cela n'existe pas déjà System.Linq.Enumerable (qui est ce que je découvre généralement immédiatement après avoir écrit quelque chose comme ça), la question est, quelle est cette opération de Separate sur les listes habituellement appelées dans d'autres cadres fonctionnels ou des langues ?

Était-ce utile?

La solution

Haskell: intersperse

Zip signifie généralement une opération différente (zip [a, b, c] [x, y, z] = [(a, x), (b, y), (c, z)])

Autres conseils

Il est souvent appelé Join.

Il ressemble un peu à string.join (), bien que d'inscription ne retourne pas une vraie liste.

Il est aussi appelé à interposer Clojure.

user> (interpose "," ["a" "b" "c"])
("a" "," "b" "," "c")

Sons comme faire une fermeture à glissière (britannique - zip), avec des données sur le côté long et le séparateur de l'autre: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top