기능 목록 조작에서“각 항목 사이에 무언가를 삽입하는 것”이라고하는 것은 무엇입니까?

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

문제

때때로 나는 마지막 항목을 제외하고 각 항목에 새 항목을 삽입하여 목록을 처리해야합니다. 문자열 목록의 각 항목 사이에 쉼표를 넣는 방법과 유사합니다.

나는 매번 마지막 (또는 첫 번째) 항목에 대한 특별한 사례를 코딩하는 데 닥쳤으므로 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 다른 기능 프레임 워크 또는 언어에서 일반적으로 호출되는 목록에서의 작동?

도움이 되었습니까?

해결책

Haskell : intersperse

Zip 일반적으로 다른 작업을 의미합니다 (zip [a, b, c] [x, y, z] = [(a, x), (b, y), (c, z)])

다른 팁

종종 가입이라고합니다.

Join이 실제 목록을 반환하지는 않지만 String.join ()과 비슷하게 보입니다.

Clojure에서 Interpose라고도합니다.

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

지퍼 (British -Zip)를 사용하는 것처럼 들립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top