c#中有"拆分列表"方法吗?

Mic*_*x2a 7 c# linq algorithm list

在C#中,调用该.Split方法会根据某些字符或字符串将字符串拆分为字符串数组.

是否存在列表或数组的等效方法?

例如:

var foo = new List<int>() { 1, 2, 3, 0, 4, 5, 0, 6 };
var output = Split(foo, 0);
// produces { { 1, 2, 3 }, { 4, 5 }, { 6 } }
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止 - 是否有更清洁或更有说服力的方式来完成同样的任务?

IEnumerable<IEnumerable<T>> Split<T>(IEnumerable<T> list, T divider)
{
    var output = new List<List<T>>();
    var temp = new List<T>();
    foreach ( var item in list )
    {
        if (item.Equals(divider))
        {
            output.Add(temp);
            temp = new List<T>();
        }
        else
        {
            temp.Add(item);
        }
    }

    output.Add(temp);
    return output;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我刚刚想到我的版本只会将列表拆分为一个元素,而string.Split可以使用单个字符或任意字符串进行拆分.

只是为了完整起见,实现它的最佳方法是什么?

I4V*_*I4V 8

没有内置的等价物,但是懒惰评估的等价物

IEnumerable<IEnumerable<T>> Split<T>(IEnumerable<T> list, T divider)
{
    var temp = new List<T>();
    foreach (var item in list)
    {
        if (!item.Equals(divider))
        {
            temp.Add(item);
        }
        else
        {
            yield return temp;
            temp = new List<T>();
        }
    }

    if(temp.Count>0) yield return temp;
}
Run Code Online (Sandbox Code Playgroud)