2013-02-08 22 views
1

在这个数据表有没有重复,我需要的行索引,其中列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

确实有不同的方法来实现相同的结果。但是这个可能是最快的。一些索引可能会有所帮助,取决于您的数据集。 – 2013-02-08 19:04:30

+1

我同意Dan-o,你也可以改变'If mtable.Rows(i)(“x”)= 2 Then'到'x'列的列索引,例如:'If mtable.Rows(i )(2)= 2 Then' – 2013-02-08 19:10:00

+1

我会初始化rowIndex为-1,以便您可以判断是否找不到该值。 – 2013-02-08 19:21:38

回答

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”可能值的范围是适当的,您可以使用数组将该值映射到行号。

+0

不超过200条记录,代码在问题仍然很好,但它可以通过散列表映射获得更快的速度吗? – user1570048 2013-02-08 21:55:15

+0

@ user1570048如果这就是您的所有记录,那么如果速度是一个问题,则可能值得考虑问题在其他地方。 – 2013-02-08 22:30:38

1

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

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