2013-02-08 52 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());