分散列表<>
可能重复:
Enumerable.Intersperse的扩展方法?
我有一个像这样的List<string>
:
"foo", "bar", "cat"
我希望它看起来像这样:
"foo", "-", "bar", "-", "cat"
有没有一种C#方法可以做到这一点?
您可以创建一个扩展,该扩展返回带有散布项的IEnumerable<T>
:
public static class ListExtensions {
public static IEnumerable<T> Intersperse<T>(this IEnumerable<T> items, T separator) {
bool first = true;
foreach (T item in items) {
if (first) {
first = false;
} else {
yield return separator;
}
yield return item;
}
}
}
这样做的好处是,您不必使用额外的项目混淆列表,您可以在返回时使用它:
List<string> words = new List<string>() { "foo", "bar", "cat" };
foreach (string s in words.Intersperse("-")) {
Console.WriteLine(s);
}
如果您需要,您当然可以将结果作为列表获得:
words = words.Intersperse("-").ToList();
这是我的个人工具箱中的一个实现。 它比你所需要的更普遍。
举个例子,你会写
var list = new List<string> { "foo", "bar", "cat" };
var result = list.InterleaveWith(Enumerable.Repeat("-", list.Count - 1));
在行动中看到它 。
public List<string> GetNewList(List<string> list, string s)
{
var result = new List<string>();
foreach (var l in list)
{
result.Add(l);
result.Add(s);
}
result.RemoveAt(result.Count - 1);
return result;
}
您可以使用此方法获取您的列表
var result = GetNewList(str,"-");
链接地址: http://www.djcxy.com/p/54863.html
上一篇: Intersperse a List<>