C#使用Linq从锯齿状数组中获取列

如何使用 Linq从锯齿状数组中获取列的元素作为平面数组????
public class Matrix<T>
{
    private readonly T[][] _matrix;

    public Matrix(int rows,int cols)
    {
        _matrix = new T[rows][];
        for (int r = 0; r < rows; r++)
        {
            _matrix[r] = new T[cols];
        }
    }

    public T this[int x,int y]
    {
        get { return _matrix[x][y]; }
        set { _matrix[x][y] = value; }
    }

    // Given a column number return the elements
    public IEnumerable<T> this[int x]
    {
        get
        {
        }
    }
}

Matrix<double> matrix = new Matrix<double>(6,2);
matrix[0,0] = 0;
matrix[0,1] = 0;
matrix[1,0] = 16.0;
matrix[1,1] = 4.0;
matrix[2,0] = 1.0;
matrix[2,1] = 6.0;
matrix[3,0] = 5.0;
matrix[3,1] = 7.0;
matrix[4,0] = 1.3;
matrix[4,1] = 1.0;
matrix[5,0] = 1.5;
matrix[5,1] = 4.5;

解决方法

只是:
public IEnumerable<T> this[int x]
{
    get
    {
       return _matrix.Select(row => row[x]);
    }
}

当然最好在LINQ查询之前检查x是否不在范围之外.

无论如何,鉴于您正在处理矩阵,为了更加清晰,您可以切换到bidimensional array而不是锯齿状阵列(因此毫无疑问,这两个维度的大小).

相反,如果性能确实对您很重要,请继续使用看似比二维数组快一点的锯齿状数组(例如LINK1,LINK2).

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...