C# 如何使用linq拆分列表

C# 如何使用linq拆分列表,c#,linq,C#,Linq,我有一个int的列表,它由值0,0,0,1,2,3,4,0,0组成,现在我想把它分成3个列表,像这个列表A由0,0,0组成,列表B由1,2,3,4组成,列表C由0,0组成。我知道如何使用if和for进行拆分,但我如何使用linq进行拆分。通常的格式我需要在开始时分割一些零,在中间分割一些值,在最后的一些零中,我需要在一个列表中分割第一个零,在一个列表中分割中间值,在另一个列表中分割结束零,正如我在上面的例子中使用linq所说的那样,我还喜欢使用该值的索引。第一个 myList.TakeWhile

我有一个int的列表,它由值0,0,0,1,2,3,4,0,0组成,现在我想把它分成3个列表,像这个列表A由0,0,0组成,列表B由1,2,3,4组成,列表C由0,0组成。我知道如何使用if和for进行拆分,但我如何使用linq进行拆分。通常的格式我需要在开始时分割一些零,在中间分割一些值,在最后的一些零中,我需要在一个列表中分割第一个零,在一个列表中分割中间值,在另一个列表中分割结束零,正如我在上面的例子中使用linq所说的那样,我还喜欢使用该值的索引。

第一个

myList.TakeWhile(x => x==0)
第二个

myList.SkipWhile(x => x==0).TakeWhile(x => x!= 0)
第三个

myList.SkipWhile(x => x==0).SkipWhile(x => x!= 0)

您可以使用Linq向对象公开的Skip和Take方法来获取序列的某些元素

var myList = new int[] {0,0,0,1,2,3,4,0,0};
var list1 = myList.Take(3);
var list2 = myList.Skip(3).Take(4);
var list3 = myList.Skip(7);
您可以在linq中使用take或Skipn


如果要按零序拆分,请尝试以下代码:

static void Main(string[] argv)
{

    var list = new[] { 0, 0, 0, 1, 2, 3, 4, 0, 0 };

    int groupIndex = 0;
    var result = list.Select(
        (e, i) =>
            {
                if (i == 0)
                {
                    return new {val = e, group = groupIndex};
                }
                else
                {
                    groupIndex =
                        (e != 0 && list[i - 1] == 0) || (e == 0 && list[i - 1] != 0)
                            ?
                                groupIndex + 1
                            : groupIndex;

                    return new {val = e, group = groupIndex};
                }
            }
        ).GroupBy(e => e.group).Select(e => e.Select(o => o.val).ToList()).ToList();

    foreach (var item in result)
    {
        foreach (var val in item)
        {
            Console.Write(val + ";");
        }
        Console.WriteLine();
        Console.WriteLine("Count:" + item.Count);
        Console.WriteLine();
    }

    Console.ReadLine();
}
输出为:

0;0;0;
Count:3

1;2;3;4;
Count:4

0;0;
Count:2

从你的问题中分离出来的标准是什么,真的不清楚。如果我给出了错误的答案,请解释您的问题。

您还没有说明要如何分割数据。为什么要这样分割,而不是说,{0,0,0,1},{2,3,4,0},{0}?请给我们更多关于分割标准的细节。它只是由零和非零组成的独立序列吗?
0;0;0;
Count:3

1;2;3;4;
Count:4

0;0;
Count:2