找到VB.Net DataTable的最大值

时间:2012-06-20 09:21:38

标签: vb.net datatable integer max

我对此非常感到难过。我有一个相当大的(~1500 x~1000)DataTable,它是从.csv文件中获取的正负整数 。对于我的程序,我需要找到整个表的最大值,而不只是在单行或列中。最理想的是,代码简短而甜蜜,但情况并非总是如此;)。

我的DataTable的名称是BeamMap,我试图返回值MaxValue(已经声明为整数)。我可以根据请求发布我创建DataTable的代码。

额外信用:(不是真的)

有没有办法快速找到所述最大值的位置(即行,列)?到目前为止,我见过的所有例子都是逐个单元格检查预定值,这对我所拥有的数据点数量来说效率很低。

3 个答案:

答案 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

注意:如果列名称中包含空格等,则只需要方括号[]