Dan*_*ker 5 c# language-agnostic functional-programming stream lazy-evaluation
偶尔我发现我需要通过在每个项目之后插入一个新项目来处理列表,除了最后一个项目.类似于在字符串列表的每个项目之间放置逗号的方式.
我厌倦了每次编写最后一个(或第一个)项目的特殊情况,所以我在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;
}
}
Run Code Online (Sandbox Code Playgroud)
例如,这允许我以编程方式使用超链接以编程方式填充流文档,但每个文件之间有换行符:
para.Inlines.AddRange(_recentFiles.Select(f => f.ToHyperlink())
.Separate(() => new LineBreak()));
Run Code Online (Sandbox Code Playgroud)
假设System.Linq.Enumerable中不存在这个(这是我在写这样的东西之后通常会立即发现的),问题是,Separate在其他功能框架或语言中通常调用的列表上的这个操作是什么?
Dar*_*rio 14
哈斯克尔: intersperse
Zip通常意味着不同的操作(zip [a, b, c] [x, y, z] = [(a, x), (b, y), (c, z)])
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |