質問

時折、私は最後のものを除いて、各項目の後に新しい項目を挿入することで、リストを処理する必要が見つけます。あなたは文字列のリストの各項目間にコンマを置くかもしれない方法に似てます。

私はすべての時間、最後の(または最初の)アイテムの特殊なケースを符号化するうんざり、私は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;
    }
}

たとえば、これは私が簡単にプログラム的になく、それぞれの間の改行と、ハイパーリンクでフロー文書を埋めることができます

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

これはすでに(私は通常、このような何かを書いた後、すぐに発見するものである)System.Linq.Enumerableに存在しません、質問は、リスト上のこのSeparate操作は、通常、他の機能のフレームワークや言語に何と呼ばれていると仮定すると、 ?

役に立ちましたか?

解決

ハスケル: intersperseする

Zipが通常意味異なる操作(zip [a, b, c] [x, y, z] = [(a, x), (b, y), (c, z)]

他のヒント

これは、多くの場合、参加と呼ばれています。

それは)少しstring.Join(のように見える、けれども参加は本当のリストを返しません。

また、Clojureの中インターポーザと呼ばれます。

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

- :長辺と他のセパレータ上のデータと、 - (ジップ英国)

は、ジッパーを行うような音

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top