如果某个列值等于某个值,则获取行索引

时间:2013-02-08 19:01:07

标签: vb.net datatable

在这个数据表中没有重复项,我需要行索引,其中列x值等于2.我会这样做:

Dim rowIndex As Integer = 0
For i = 0 To mtable.Rows.Count - 1
            If mtable.Rows(i)("x") = 2 Then
                rowIndex = i
                Exit For
            End If
        Next

我将每秒多次调用此过程。在.NET中有更快的方法吗?

2 个答案:

答案 0 :(得分:1)

每秒多次有点模糊 - 数十还是数千?

您可以创建一个哈希表,将“x”的值映射到行号:

Dim nLookups = mtable.Rows.Count - 1
Dim lookupHash As New Hashtable(nLookups)
For i = 0 To nLookups
    lookupHash.Add(CInt(mtable.Rows(i)("x")), i)
Next

然后

Dim rowSought As Integer = -1
If lookupHash.ContainsKey(2) Then
    rowSought = lookupHash(2)
End If

或者,如果“x”的可能值范围合适,您可以使用数组将值映射到行号。

答案 1 :(得分:1)

DataTable select可以工作,我认为它应该比遍历行集合更快。

    var index = mtable.Rows.IndexOf(mtable.Select("x = 2").FirstOrDefault());