C# 获取交错数组的前三个元素

C# 获取交错数组的前三个元素,c#,winforms,linq,jagged-arrays,C#,Winforms,Linq,Jagged Arrays,我的大脑不工作了,我正试图抓住这个网格的前三行。我正在做一个简单的跳棋游戏,只是为了学习一些新东西。我的代码抓取前三列来初始化红色棋子的位置。我想要前三排 这就是我的代码现在所做的: 这是我的(简化)代码Square是我的一个类,它只保存一些小项目来跟踪片段 private Square[][] m_board = new Square[8][]; for (int i = 0; i < m_board.Length; i++) m_board[i] =

我的大脑不工作了,我正试图抓住这个网格的前三行。我正在做一个简单的跳棋游戏,只是为了学习一些新东西。我的代码抓取前三列来初始化红色棋子的位置。我想要前三排

这就是我的代码现在所做的:

这是我的(简化)代码
Square
是我的一个类,它只保存一些小项目来跟踪片段

    private Square[][] m_board = new Square[8][];
    for (int i = 0; i < m_board.Length; i++)
        m_board[i] = new Square[8];


//find which pieces should hold red pieces, the problem line
    IEnumerable<Square> seqRedSquares = 
         m_board.Take(3).SelectMany(x => x).Where(x => x != null);
//second attempt with the same result
    //IEnumerable<Square> seqRedSquares = 
         m_board[0].Union(m_board[1]).Union(m_board[2]).Where(x => x != null);

//display the pieces, all works fine
    foreach (Square redSquare in seqRedSquares)
    {
        Piece piece = new Piece(redSquare.Location, Piece.Color.Red);
        m_listPieces.Add(piece);
        redSquare.Update(piece);
    }
private Square[]m_board=新Square[8][];
对于(int i=0;ix)。其中(x=>x!=null);
//第二次尝试同样的结果
//IEnumerable seqRedSquares=
m_板[0]。并集(m_板[1])。并集(m_板[2])。其中(x=>x!=null);
//展示作品,所有作品都很好
foreach(方形和红色方形)
{
工件=新工件(红色方块。位置,工件。颜色。红色);
m_列表条。添加(条);
更新(件);
}

如果您使用的是
MU板。取(3)
获得前三列,则应给出前三行:

 m_board.Select(c => c.Take(3))
如果要将行(或列)作为可枚举项,请执行以下操作:

var flattened = m_board
    .SelectMany((ss, c) =>
        ss.Select((s, r) =>
            new { s, c, r }))
    .ToArray();

var columns = flattened
    .ToLookup(x => x.c, x => x.s);

var rows = flattened
    .ToLookup(x => x.r, x => x.s);

var firstColumn = columns[0];
var thirdRow = rows[2];

请不要在标题前加上“C#LINQ”。这已经在标签中了。@John Saunders,我对这两种方法都没有很强的意见,但是如果你浏览问题标题列表,这是否会让你在心理上更容易排序?上的人习惯于使用标签来过滤问题列表,所以不,不是这样。这只会让问题标题难看和不可读。自言自语:“C#LINQ获得锯齿阵列的前三个元素”vs“获得锯齿阵列的前三个元素”。哪一个是有道理的,并告诉你一些关于这个问题的事情,而哪一个只是摆在它前面?@JohnSaunders,啊,我明白了,你说得很有道理。我以后会写干净的标题。谢谢,我知道我很接近正确的答案。而且,以前从未用过。ToLookup()。如果我能投你两次票,我会的。@jb.-是的,
.ToLookup()
非常棒。干杯