기능 목록 조작에서“각 항목 사이에 무언가를 삽입하는 것”이라고하는 것은 무엇입니까?
-
18-09-2019 - |
문제
때때로 나는 마지막 항목을 제외하고 각 항목에 새 항목을 삽입하여 목록을 처리해야합니다. 문자열 목록의 각 항목 사이에 쉼표를 넣는 방법과 유사합니다.
나는 매번 마지막 (또는 첫 번째) 항목에 대한 특별한 사례를 코딩하는 데 닥쳤으므로 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)를 사용하는 것처럼 들립니다.
제휴하지 않습니다 StackOverflow