我想读取一个数据表,该数据表由每行不同的列组成一个数组。
我的示例数据如下所示
1 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.098 0.000
1 0.000 0.051 0.851 0.000 0.000 0.000 0.000
1 0.000 0.000 0.000 0.000 0.000 0.000 0.266 0.203 0.000
1 0.011 0.210 0.311 0.000 0.000 0.000 0.000 0.000 0.000
1 0.000 0.000 0.000 0.000 0.000 0.009 0.007 0.497
1 0.004 0.023 0.063 0.140 0.000 0.000 0.000 0.000 0.000
1 0.027 0.010 0.130 0.192 0.156 0.082 0.068
我设法把它放到一个数组中,如下所示:
public static double[][] dataTableToMatrix(DataTable dt)
{
double[][] data = new double[dt.Rows.Count][];
for (int x = 0; x < dt.Rows.Count;x++)
{
data[x] = new double[dt.Columns.Count];
for (int y = 0; y < dt.Columns.Count; y++)
{
if ((dt.Rows[x][y]) != DBNull.Value)
{
data[x][y] = Convert.ToDouble(dt.Rows[x][y]);
}
else
{
break;
}
}
}
return data;
}
我尝试了上面的代码,但是只要有一个较短的列,结果数组总是有最高的列数和零。我想读它,直到每行的最后一个值然后跳转到下一行。这个问题的任何解决方案?
答案 0 :(得分:0)
如果我理解你的问题,这会做你想要的(而不是预先分配子数组只需使用Lists,然后将它们转换为数组):
public static double[][] dataTableToMatrix(DataTable dt)
{
double[][] data = new double[dt.Rows.Count][];
for (int x = 0; x < dt.Rows.Count;x++)
{
List<double> items = new List<double>();
for (int y = 0; y < dt.Columns.Count; y++)
{
if (dt.Rows[x][y] != DBNull.Value)
items.Add(Convert.ToDouble(dt.Rows[x][y]));
else
break;
}
data[x] = items.ToArray();
}
return data;
}
答案 1 :(得分:-1)
public static double[][] dataTableToMatrix(DataTable dt)
{
double[][] data = new double[dt.Rows.Count][];
for (int x = 0; x < dt.Rows.Count;x++)
{
var countOfNonNullValuesInRow = dt.Rows[x].ItemArray.Count(a => a != DBNull.Value);
data[x] = new double[countOfNonNullValuesInRow];
for (int y = 0; y < countOfNonNullValuesInRow; y++)
{
data[x][y] = Convert.ToDouble(dt.Rows[x][y]);
}
}
return data;
}