穿插列表<>

fas*_*sss 7 c# list

可能重复:
Enumerable.Intersperse的扩展方法?

List<string>喜欢这样的:

"foo", "bar", "cat"

我希望它看起来像这样:

"foo", "-", "bar", "-", "cat"

是否有C#方法可以做到这一点?

Guf*_*ffa 5

您可以创建一个返回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;
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,您不必用额外的项目弄乱您的列表,您可以在返回时使用它:

List<string> words = new List<string>() { "foo", "bar", "cat" };

foreach (string s in words.Intersperse("-")) {
  Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)

如果需要,您当然可以以列表形式获取结果:

words = words.Intersperse("-").ToList();
Run Code Online (Sandbox Code Playgroud)