分散列表<>

可能重复:
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<>

下一篇: License question: GPL copyright header