我对此非常感到难过。我有一个相当大的(~1500 x~1000)DataTable,它是从.csv文件中获取的正负整数 。对于我的程序,我需要找到整个表的最大值,而不只是在单行或列中。最理想的是,代码简短而甜蜜,但情况并非总是如此;)。
我的DataTable的名称是BeamMap
,我试图返回值MaxValue
(已经声明为整数)。我可以根据请求发布我创建DataTable的代码。
额外信用:(不是真的)
有没有办法快速找到所述最大值的位置(即行,列)?到目前为止,我见过的所有例子都是逐个单元格检查预定值,这对我所拥有的数据点数量来说效率很低。
答案 0 :(得分:9)
您还可以使用Compute(" MAX(columnName),"")方法查找列的最大值
Private Function FindMaxDataTableValue(ByRef dt As DataTable) As Integer
Dim currentValue As Integer, maxValue As Integer
maxValue = 0
For c As Integer = 0 To dt.Columns.Count - 1
currentValue = dt.Compute("MAX(c)", "")
If currentValue > maxValue Then maxValue = currentValue
Next
Return maxValue
End Function
答案 1 :(得分:1)
此代码将执行此操作。我没有试过一个巨大的数据表,所以你必须看看需要多长时间:
Private Function FindMaxDataTableValue(ByRef dt As DataTable) As Integer
Dim currentValue As Integer, maxValue As Integer
Dim dv As DataView = dt.DefaultView
For c As Integer = 0 To dt.Columns.Count - 1
dv.Sort = dt.Columns(c).ColumnName + " DESC"
currentValue = CInt(dv(0).Item(c))
If currentValue > maxValue Then maxValue = currentValue
Next
Return maxValue
End Function
依次对每列进行排序,如果第一个值大于当前最大值,则更新它。
要获得额外的功劳,您可以执行此操作,但可能会在IndexOf
找到rowIndex
时出现性能影响:
Private Function FindMaxDataTableValue(ByRef dt As DataTable) As Integer
Dim currentValue As Integer, maxValue As Integer
Dim rowIndex As Integer, colIndex As Integer
Dim dv As DataView = dt.DefaultView
For c As Integer = 0 To dt.Columns.Count - 1
dv.Sort = dt.Columns(c).ColumnName + " DESC"
currentValue = CInt(dv(0).Item(c))
If currentValue > maxValue Then
rowIndex = dt.Rows.IndexOf(dv(0).Row)
colIndex = c
maxValue = currentValue
End If
Next
Debug.WriteLine("Max value found at Col:" + colIndex.ToString + " Row:" + rowIndex.ToString)
Return maxValue
End Function
答案 2 :(得分:0)
我无法获得user3549709的代码,因为不断收到“聚合参数中的语法错误:期望单个列参数可能带有'Child'限定符。”错误。我的所有表都是手动填充的,不会从数据库中获取数据 - 我不知道这是否有所作为。
这是我用来代替最小值和最大值的:
Dim intcurrentValue As Integer
Dim intmaxValue As Integer
Dim intMinValue As Integer
intmaxValue = 0
intMinValue = 0
For Each colMyColumn As DataColumn In dtDelta_E.Columns
intcurrentValue = dtDelta_E.Compute("MAX([" & colMyColumn.ColumnName & "])", "")
If intcurrentValue > intmaxValue Then intmaxValue = intcurrentValue
intcurrentValue = dtDelta_E.Compute("MIN([" & colMyColumn.ColumnName & "])", "")
If intcurrentValue < intMinValue Then intMinValue = intcurrentValue
Next
注意:如果列名称中包含空格等,则只需要方括号[]