使用LINQ从String列表中创建String数组列表

Jas*_*son 3 c# linq

我有一个给定的数据(我只是把它作为一个List在这里).

List<string> list1 = new List<string>();
foreach( var x in Regex.Split( "A B C D E F", " " ) )
    list1.Add( x );
Run Code Online (Sandbox Code Playgroud)

现在我想做一个像这样的最终List.

List<string[]> list2 = new List<string[]>();
Run Code Online (Sandbox Code Playgroud)

所以,我试过这个代码(我试过LINQ但没有收获).

int i = 0;
string[] array1 = new string[2];
foreach( var x in list1 )
{
    if( i % 2 == 0 )
    {
        array1[0] = x;
    }
    else
    {
        array1[1] = x;
        list2.Add( array1 );
        array1 = new string[2];
    }
    i++;
}
Run Code Online (Sandbox Code Playgroud)

我想使用LINQ获得相同的结果.请帮忙.

谢谢.

(编辑:结果应该是列表2中每个项目的A和B,C和D,E和F)

Joh*_*nny 5

试试这个:

List<string[]> list2 = list1
               .Select((value, index) => new { PairNum = index / 2, value })
               .GroupBy(pair => pair.PairNum)
               .Select(grp => grp.Select(g => g.value).ToArray())
               .ToList();
Run Code Online (Sandbox Code Playgroud)

步骤是:

  1. Select((value, index) => new { PairNum = index / 2, value }) => {0,'A'} {0,'B'} {1,'C'} {1,'D'} {2,'E'} {2,'F'}

  2. GroupBy(pair => pair.PairNum) => {0:{'A','B'}},{1:{'C','D'}},{2:{'E','F'}}

  3. Select(grp => grp.Select(g => g.value).ToArray()) =>将值转换为数组,因为列表项应该是数组.
  4. 执行查询