在功能列表操作,有什么事我们所说的“将各项目之间的事情”?
-
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)]
)
其他提示
它通常被称为加入。
这看起来有点像的string.join(),虽然加入不返回真正的列表。
它也用Clojure介调用。
user> (interpose "," ["a" "b" "c"])
("a" "," "b" "," "c")
听起来像做了一个拉链 - 上的长边和另一分离器(英国拉链),具有数据: - )
不隶属于 StackOverflow