我已經寫了一個陣列交集的簡短函數,並且想知道爲什麼一個函數比另一個函數快。陣列相交函數速度
1)
Dim list2() As String 'Assume it has values'
Dim list2length As Integer = list2.length
Function newintersect(ByRef list1() As String) As String()
Dim intersection As New ArrayList
If (list1.Length < list2length) Then
'use list2'
For Each thing As String In list2
If (Array.IndexOf(list1, thing) <> -1) Then
intersection.Add(thing)
End If
Next
Else
'use list1'
For Each thing As String In list1
If (Array.IndexOf(list2, thing) <> -1) Then
intersection.Add(thing)
End If
Next
End If
Return intersection
End Function
2)
Dim list2() As String 'Assume it has values'
Dim list2length As Integer = list2.length
Function newintersect(ByRef list1() As String) As String()
Dim intersection As New ArrayList
If (list1.Length > list2length) Then 'changed >'
'use list2'
For Each thing As String In list2
If (Array.IndexOf(list1, thing) <> -1) Then
intersection.Add(thing)
End If
Next
Else
'use list1'
For Each thing As String In list1
If (Array.IndexOf(list2, thing) <> -1) Then
intersection.Add(thing)
End If
Next
End If
Return intersection
End Function
3)
Dim list2() As String 'Assume it has values'
Dim list2length As Integer = list2.length
Function newintersect(ByRef list1() As String) As String()
For Each thing As String In list1
If (Array.IndexOf(list2, thing) <> -1) Then
intersection.Add(thing)
End If
Next
Return intersection
End Function
所以對於我的測試用例,1取65秒,3取63秒,而2實際發生75秒。任何人都知道爲什麼3是最快的?爲什麼1比2快?
(很抱歉的窮人格式化......似乎無法直接將其粘貼)
哇......那做了一個很大的區別...只需要3.3秒,而在= D之前的65秒只需要3.3秒。你確實犯了一個錯誤,但它不應該有一個「不」......我正在做一個十字路口......「不」會給我所有那些不在每個列表中的所有人。這也需要.net 3.5+,雖然對我來說沒問題,但.net 2.0有沒有類似的方法? – Eugene 2010-09-09 22:49:59
@ user389823:是的,交叉點......那麼它更合理。 :)在框架2.0中沒有HashSet,所以你必須使用一個字典,其中的值將被使用。 – Guffa 2010-09-09 23:23:44