Arrays 使用Select从数据表中双击(,)而不是双击()
我有一个带有双精度或字符串字段的数据表。使用Select和ToArray方法,如何将已知为双精度的列提取到多维双精度数组中 对于初学者,我可以使用Arrays 使用Select从数据表中双击(,)而不是双击(),arrays,vb.net,linq,select,datatable,Arrays,Vb.net,Linq,Select,Datatable,我有一个带有双精度或字符串字段的数据表。使用Select和ToArray方法,如何将已知为双精度的列提取到多维双精度数组中 对于初学者,我可以使用 Dim arrayOfDoubles()() As Double = dt.AsEnumerable().Select(Function(x) {Convert.ToDouble(x("Age")), Convert.ToDouble(x("Weight"))}).ToArray() 然而,上面的结果是一个锯
Dim arrayOfDoubles()() As Double = dt.AsEnumerable().Select(Function(x) {Convert.ToDouble(x("Age")), Convert.ToDouble(x("Weight"))}).ToArray()
然而,上面的结果是一个锯齿状的,即双数组,我无法将其输入到我的处理中,我不想编写循环来拾取元素,只是为了将它们输入到
因此,如果我知道我有1000行和20列,它们在DataTable中是双精度的,并且知道它们的名称,那么我如何直接使用Select和ToArray创建Double201000数组或Double1000,20数组
另外,如果我想过滤年龄>40的数据,并获取相同的20列,但结果只有300行,该怎么办。如何通过此筛选创建Double20300阵列或Double300,20?您正在寻找类似的内容:
Dim arrayOfDoubles()() As Double = _
dt.AsEnumerable() _
.Select(Function(x) _
{ _
Convert.ToDouble(x("Age")), _
Convert.ToDouble(x("Weight")) _
}) _
.ToArray()
Dim output(arrayOfDoubles.Length, arrayOfDoubles.First().Length) As Double
For i = 0 To arrayOfDoubles.Length - 1
For j = 0 To arrayOfDoubles.First().Length - 1
output(i, j) = arrayOfDoubles(i)(j)
Next
Next
对于筛选问题,只需在创建输出之前将筛选添加到arrayOfDoubles即可解决。2d数组没有LINQ运算符,因此需要对每个数组执行两个嵌套操作,然后构建2d数组。这是你知道怎么做的吗?你能改变你的处理,使它接受锯齿状数组吗?过滤:例如,AsEnumerable.WhereFunctionx DirectCastxAge,Double>40,或者使用datatable选择方法dt。选择[Age]>40@Enigmativity-谢谢,因为你的语法会很快把我推到2D数组中。作为一个小补丁,我将Dim outputarrayOfDoubles.Length,arrayOfDoubles.First.Length更改为Dim outputarrayOfDoubles.Length-1,arrayOfDoubles.First.Length-1为Double