如何使用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;
答案 0 :(得分:13)
只是:
public IEnumerable<T> this[int x]
{
get
{
return _matrix.Select(row => row[x]);
}
}
当然最好在LINQ查询之前检查x
是否不在范围之外。
无论如何,鉴于您正在处理矩阵,为了更加清晰,您可以切换到bidimensional array而不是锯齿状数组(因此毫无疑问是2维的大小)。
答案 1 :(得分:1)
var source = new int[3][] {
Enumerable.Range(1,3).ToArray(),
Enumerable.Range(10,5).ToArray(),
Enumerable.Range(100,10).ToArray()
};
int index = 0;
var result = (from array in source
from item in array
group item by Array.IndexOf(array, item) into g
where g.Key == index
select g.ToArray()).FirstOrDefault();
答案 2 :(得分:0)
var q = from row in jagged
from value in row
where value == anyvalue
select value;
无论如何为什么要使用LINQ?使用经典版本将提高性能并使调试更容易