我是C#的新手,我无法在任何地方找到这样的例子(虽然我看过类似的例子,但是演员是ToString,而在我的情况下我想要整数数组)。我有一个DataTable对象,
DataTable results = dbCon.ExecuteQuery("my query");
int m = results.Rows.Count;
int n = results.Columns.Count;
我想要一个由n个一维数组组成的锯齿状数组(每个数组都是DataTable的一列(results
,在这种情况下)。
int[][] jagged = new int[n][];
for (int i = 0; i < n; i++)
{
jagged[i] = new int[m];
//var coli = results.Columns.Cast<Array>().Select(column => Convert.ToInt32(column)).ToArray();
//jagged[i] = coli;
}
我尝试了一些事情(例如我评论过的内容),但我现在已经陷入了困境。
如果有人知道怎么做,请发帖!谢谢!
另外,更具体地说,我真的很想使用像NumPy为Python提供的功能... dataSet = np.array(dataList).astype('float')
。因为我的DataTable很大,所以双循环不符合我的最佳利益。
答案 0 :(得分:2)
我认为你还需要创建类型对象的数组。 DataTable
DataRow
包含object
类型的内容,因此您需要将它们存储在锯齿状数组中。
我认为这会奏效:
DataTable table = dbCon.ExecuteQuery("my query");
int rowCount = table.Rows.Count;
int colCount = table.Columns.Count;
object[][] objs = new object[colCount][];
for (int currentColumn = 0; currentColumn < colCount; currentColumn++)
{
objs[currentColumn] = new object[rowCount];
for (int currentRow = 0; currentRow < rowCount; currentRow++)
{
objs[currentColumn][currentRow] = table.Rows[currentRow][currentColumn];
}
}
答案 1 :(得分:0)
我想,你已经拥有了这个。尝试:
results.Rows[rowIndex][columnIndex]
要将它变成锯齿状数组,你可以选择简单的 for 循环:
for (int i = 0; i < results.Rows.Count; i++)
{
for (int j = 0; j < results.Columns.Count; j++)
{
jagged[i][j] = results.Rows[i][j];
}
}
答案 2 :(得分:0)
您可以使用LINQ对DataTable
获得您想要的内容。对于DataTable
中的每一列,您需要迭代行并选择该列。您需要在列上调用Cast()
至Select()
,并在行AsEnumerable()
上调用Select()
:
int[][] jagged = results.Columns.Cast<DataColumn>()
.Select(
col => results.AsEnumerable()
.Select(row => row.Field<int>(col))
.ToArray()
).ToArray();