arrays - 使用 Select 的 DataTable 中的 Double(,) 而不是 Double()()
问题描述
我有一个带有 Double 或 String(字符)字段的 DataTable。使用 Select 和 ToArray 方法,如何将我知道是双精度的列提取到多维双精度数组中?
对于初学者,我可以通过使用将 Age 和 Weight 列获取到锯齿状数组中
Dim arrayOfDoubles()() As Double = dt.AsEnumerable().Select(Function(x) {Convert.ToDouble(x("Age")), Convert.ToDouble(x("Weight"))}).ToArray()
但是,上面的结果是一个锯齿状的,即 ()() 双数组,我无法将其输入到我的处理中——而且我不想编写循环来挑选 ()() 中的元素只是为了获取它们进入 (,)。
所以,如果我知道我有 1000 行和 20 列在 DataTable 中是双精度的(并且知道它们的名称),我怎么能直接使用 Select 创建一个 Double(20,1000) 数组或一个 Double(1000,20)和 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()()
在创建输出之前添加过滤即可处理。
推荐阅读
- java - 如何将 Json(来自过程)映射到 Java 对象
- sql - SQL:针对 chinook 数据库更高效的 sql 查询
- azure - 将本地存储的文档文档移动到 azure
- r - 在对线性模型应用对比之前解决组之间的不等方差?(r)
- r - 在 R 中对二维列表进行排序(字符和数字的混合)
- regex - BASH:使用正则表达式从 dd_mm_yyy 获取文件名的日期
- javascript - 我不能用javascript做一个简单的计算器
- reactjs - 警告:函数作为 React 子级无效。如果您返回 Component 而不是
从渲染 - python - openCv中透明重叠图像的问题
- android - 使用 Xamarin 在 Android 上的 FIDO2