J'ai écrit une fonction courte pour l'intersection de tableaux et je voulais savoir pourquoi une fonction est plus rapide que l'autre.Vitesse de la fonction d'intersection de tableaux
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
Donc, pour mon testcase, 1 prendre 65 secondes, 3 prend 63 secondes, tandis que 2 prend effectivement 75 secondes Quelqu'un sait pourquoi 3 est le plus rapide? Et pourquoi 1 est plus rapide que 2?
(Désolé pour la mauvaise mise en forme ... ne peut pas sembler coller à droite)
Whoa ... qui a fait une grande différence ... prend seulement 3,3 secondes contre 65 secondes avant = D. Vous avez fait une erreur cependant ... il ne devrait pas avoir un "non" ... Je fais une intersection ... "pas" me donnerait tous ceux qui ne sont pas tous les deux dans chaque liste. Aussi cela nécessite .net 3.5+, et bien que ce soit correct pour moi, y at-il une méthode similaire pour .net 2.0? – Eugene
@ user389823: Oui, l'intersection ... alors c'est plus logique. :) Dans framework 2.0 il n'y a pas de HashSet, donc vous devez utiliser un Dictionary, où la valeur serait inutilisée. – Guffa