2010-10-07 65 views
2

我有int列表,其中包含值0,0,0,1,2,3,4,0,0现在我想将它分成3个列表,像这个列表A由0组成,0,0和列表B包括1,2,3,4和列表C包括0,0.I知道如何拆分使用如果和为,但我怎么能做到这一点使用LINQ。通常的格式,我需要分裂开始一些零和中间一些值和最后一些零,我需要分裂一个列表中的第一个零,一个列表中的中间值和另一个列表中结束零,如我在上面的例子中说的使用linq我也喜欢拿这个价值指数。如何使用linq分割列表

+3

你还没有说*你想如何拆分数据。为什么它应该以这种方式分割,而不是{0,0,0,1},{2,3,4,0},{0}? – 2010-10-07 09:13:00

+0

请给我们更多关于拆分标准的细节。它是零和非零的单独序列吗? – LukeH 2010-10-07 09:13:18

+0

我不认为你可以 – Aliostad 2010-10-07 09:14:34

回答

7

第一个。

myList.TakeWhile(x => x==0) 

第二个。

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

第三个。

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

您可以使用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); 
-1

您可以在LINQ

List<int> list = new List<int>(); 
       list.Add(0); 
       list.Add(0); 
       list.Add(0); 
       list.Add(1); 
       list.Add(2); 
       list.Add(3); 
       list.Add(4); 
       list.Add(0); 
       list.Add(0); 

       var listOne = list.Take(3); 
       var listSecond = list.Skip(3).Take(4); 
       var listThird = list.Skip(7); 
0

使用Take(n)Skip(n)如果你想通过零序分裂那就试试这个代码:

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 

这是真的不清楚什么是从你的问题分裂的标准。如果我给了错误的答案,然后解释你的问题。