是否有方法在数组中的每个对象之间插入对象?
例如,给定一个非零整数数组,有没有办法在每个元素之间插入0
?例如。将[1, 2, 3]
更改为[1, 0, 2, 0, 3]
?
具体来说,我希望做一些像String.Join(0, [1, 2, 3])
这样的声明式的东西,但是使用任意数组(不只是char
数组)。一种非声明性的方式是这样的:
public static IList<T> InterleaveWith<T>( this IList<T> @this, T divider ) {
IList<T> joined = new List<T>( @this.Count * 2 );
foreach( T item in @this ) {
joined.Add( item );
joined.Add( divider );
}
joined.RemoveAt( joined.Count - 1 );
return joined;
}
答案 0 :(得分:6)
没有内置方法,但您可以使用yield return
轻松完成:
static IEnumerable<T> Join<T>(T separator, IEnumerable<T> items) {
bool first = true;
foreach (var item in items) {
if (!first) {
yield return separator;
} else {
first = false;
}
yield return item;
}
}
答案 1 :(得分:0)
使用尽可能多的内置功能的方法是使用SelectMany
:
static IEnumerable<T> Join<T>(this IEnumerable<T> items, T separator) =>
items.SelectMany((item, index) =>
index == 0 ? new[] { item } : new[] { separator, item });
但实际上,我可能会选择类似于@dasblinkenlight所写的自定义实现。