使用 Select 来自 DataTable 的 Double(,) 而不是 Double()()
Double(,) and not Double()() from DataTable Using Select
我有一个包含 Double 或 String(字符)字段的数据表。使用 Select 和 ToArray 方法,如何将我知道是双精度的列提取到多维双精度数组中?
首先,我可以使用
将年龄和体重列提取到锯齿状数组中
Dim arrayOfDoubles()() As Double = dt.AsEnumerable().Select(Function(x) {Convert.ToDouble(x("Age")), Convert.ToDouble(x("Weight"))}).ToArray()
但是,上面的结果导致锯齿状,即 ()() 双数组,我无法将其输入到我的处理中——而且我不想编写循环来提取 ()( ) 只是为了让他们进入 (,)。
所以,如果我知道 DataTable 中有 1000 行和 20 列(并且知道它们的名称),我该如何创建 Double(20,1000) 数组或 Double(1000, 20) 直接使用 Select 和 ToArray?
此外,如果我想过滤 age>40,并获取相同的 20 列,但结果只有 300 行,该怎么办?如何从该过滤中创建 Double(20,300) 数组或 Double(300,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()()
即可解决。
我有一个包含 Double 或 String(字符)字段的数据表。使用 Select 和 ToArray 方法,如何将我知道是双精度的列提取到多维双精度数组中?
首先,我可以使用
将年龄和体重列提取到锯齿状数组中Dim arrayOfDoubles()() As Double = dt.AsEnumerable().Select(Function(x) {Convert.ToDouble(x("Age")), Convert.ToDouble(x("Weight"))}).ToArray()
但是,上面的结果导致锯齿状,即 ()() 双数组,我无法将其输入到我的处理中——而且我不想编写循环来提取 ()( ) 只是为了让他们进入 (,)。
所以,如果我知道 DataTable 中有 1000 行和 20 列(并且知道它们的名称),我该如何创建 Double(20,1000) 数组或 Double(1000, 20) 直接使用 Select 和 ToArray?
此外,如果我想过滤 age>40,并获取相同的 20 列,但结果只有 300 行,该怎么办?如何从该过滤中创建 Double(20,300) 数组或 Double(300,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()()
即可解决。